红宝石双问号

时间:2010-02-06 14:13:28

标签: ruby

我遇到了这段红宝石代码:

str[-1]==??

双重问号是什么?之前从未见过。

2 个答案:

答案 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