Ruby ruby what is #$ ??

clc3123 · 2012年03月13日 · 最后由 clc3123 回复于 2012年03月13日 · 3467 次阅读
1.9.3p125 :006 > puts "#$"
SyntaxError: (irb):6: unterminated string meets end of file
        from /home/clc3123/.rvm/rubies/ruby-1.9.3-p125/bin/irb:16:in `<main>'


also

1.9.3p125 :007 > reg = /#$/
SyntaxError: (irb):7: unterminated regexp meets end of file
        from /home/clc3123/.rvm/rubies/ruby-1.9.3-p125/bin/irb:16:in `<main>'


Weird!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

$开头是全局变量,但是光一个$什么都不是,肯定报错阿

$" 是一个全局变量。。 按照 ruby 的内插规则, "#{$"}" 里的大括号可以省略成"#$"" 而你的 "#$" 明显少了半个引号,所以报语法错误。 正确的应该是 "#$""

ps.内插可以省略括号的还有类变量和实例变量 "#@var""#@@var"

$" 是目前已经载入的库的列表,$/ 是行分隔符。 我猜这里 # 的作用应该就是把后面的 $"$/ 转义了吧。所以才会出现没有配对的情况。改成

puts "#$""
reg = /#$//

就可以了。

#2 楼 @hooopo 详细说说,我还没听懂呢

我只是要做一个字符串的匹配,举例就是吧“$haha$”最后这个$去掉,正好碰到这个问题。

按照ruby的内插规则, "#{$"}" 里的大括号可以省略成"#$""

这个怎么回事?给点资料吧,多谢

在 irb 中不行啊?还是规矩的加上{}比较好

puts "#$""

#2 楼 @hooopo 请问什么情况下可以省略花括号?

#4 楼 @clc3123 你撞枪口上了,双引号里面的字符串是会转义的,而且支持插入 ruby 变量,#就是插入变量的修饰字符,所以如果要处理#本身,就要这么写 puts "\#$"

#6 楼 @clc3123 插入类变量、实例变量、全局变量的时候可以省略花括号

#8 楼 @hooopo 谢谢上面各位大侠了

#10 楼 @sevk 谢谢,真的很详细啊

需要 登录 后方可回复, 如果你还没有账号请 注册新账号