我遇到了这段红宝石代码:
str[-1]==??
双重问号是什么?之前从未见过。
答案 0 :(得分:21)
Ruby 1.8 具有?-prefix语法,可将字符转换为ASCII码值。例如,?a
是字母a
(或97)的ASCII值。您看到的双重问号实际上只是数字63
(或?
的ASCII值)。
?a # => 97
?b # => 98
?c # => 99
?\n # => 10
?? # => 63
要转换回来,您可以使用chr
方法:
97.chr # => "a"
10.chr # => "\n"
63.chr # => "?"
??.chr # => "?"
在 Ruby 1.9 中,?a
语法返回字符本身(字符串上的方括号语法也是如此):
?? # => "?"
"What?"[-1] # => "?"
答案 1 :(得分:2)
正如Ryan所说,?
前缀为您提供了字符的ASCII值。这在此上下文中有用的原因是,当您在Ruby 1.8中对字符串使用索引表示法时,将返回ASCII值而不是字符。 e.g。
irb(main):009:0> str = 'hello'
=> "hello"
irb(main):010:0> str[-1]
=> 111
所以以下内容不会测试字符串的最后一个字符是否为字母“o”
irb(main):011:0> str[-1] == 'o'
=> false
但这会:
irb(main):012:0> str[-1] == ?o
=> true
和(如果你知道它做了什么!)这比
更清晰irb(main):013:0> str[-1] == 111
=> true