赞 | 0 |
VIP | 2 |
好人卡 | 27 |
积分 | 1 |
经验 | 26327 |
最后登录 | 2019-10-13 |
在线时间 | 953 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 110
- 在线时间
- 953 小时
- 注册时间
- 2007-4-25
- 帖子
- 805
|
本帖最后由 苏小脉 于 2011-3-19 15:23 编辑
回复 沙漠点灰 的帖子
呵呵,其实 Ruby 在字面值的处理上是很灵活的,如果双引号和单引号都需要包含在字符串中的同时又不想转义字符,就可以使用 %、%q、%Q 这三种常规定界输入字符串的语法。不过这种语法可读性很低,有时还不如直接做如下的转义:
str = "\"66RPG\" == '66RPG' ? print \"Yes\" : print 'No'"
或是:
str = '"66RPG" == \'66RPG\' ? print "Yes" : print \'No\''
如果使用 here document 的话末尾会多一个换行,自然是不如上面的方法惬意了。
另外我上面写的还有一个多余的字符,那个小写的 `q' 可以不要。
然后又发现如果利用 Shell 命令的话其实更短……
`echo "66RPG" == '66RPG' ? print "Yes" : print 'No'>text.txt`
当然这个有平台依赖性。MS-DOS 的 echo 很神奇,双引号和单引号居然没有被 Shell 当作分隔符处理,而是原封不动地被当作字面值,相比 Unix 的语法反而节省了不少字符 o_o
哈哈,厉害~虽然你这个解没有手动释放输入流的资源,但作为 code golfer 来说确实足够了,反正流最后也会被 GC 关闭……
又在你的基础上改了改,更短了:
array=eval"[#{IO.read('text.txt').gsub(/ /,',')}]"
Sprite.new.bitmap=Bitmap.new "*.png"
(某人被PIA飞,不解释)
ovO 呃,原来是在玩谓词逻辑——“根目录下有一名字为...”且“请显示它”并不逻辑涵蕴“不能显示其它图片”,所以通配符通吃了?
另外,双引号前的空格可以省略,因为对于 RUby 词法分析器来说双引号和标识符可以被轻易定界。
class Bitmap
def draw_text(x=0, y=nil, width=0, height=nil, str=nil, align=0)
if x.is_a(Rect)
s1 = x.x
s2 = x.y
s3 = x.width
s4 = y.height
draw_text(s1,s2,s3,s4,y,width)
return
end
XXXXXXXXXXXXXXXXXX
end
end
嗯,Objecg#is_a? 就是反射的其中一个 API 咯~方法参数也可以直接用可变参数列表。
这个可以定义个叫变量的方法
让其第一次返回1,第二次返回2:
def 变量
$无语 == nil ? $无语 = 1 : 2
end
也是,这么写的话,无换行,也比我那个短一点:
Object.send(:define_method,:变量){$g?2:$g=1}
沙发的答案是好,但有个BUG,这个方法具有破坏性.....
Array.send(:define_method,:sort){self.dup.sort!}
我那个没破坏性啊~就因为这牺牲了一个 dup 的空间……我也想过直接调用 sort!,但觉得太对不起观众就没敢放上来 = = |
|