为什么ruby 1.9.2中的?a命令不返回ASCII码

Ros*_*oss 1 ruby ruby-1.9

当你?a在ruby 1.8.7中进行时,你曾经得到'a'的ASCII字符

在ruby 1.9.2中,此代码返回

> ?a
> "a"
Run Code Online (Sandbox Code Playgroud)

这有什么意义,1.9.2中的输出意味着什么

Phr*_*ogz 5

在Ruby 1.8中"foo"[0]返回索引0处的字符代码而不是索引0处的字符串.作为支持具有各种编码(而不是字节数组)的国际字符串的一部分,Ruby 1.9更改了此行为以返回单字符指定索引处的字符串.

随着此更改,?a还更改为评估为单字符字符串.据推测,这样的库就像这样的代码......

if my_string[0] == ?a
Run Code Online (Sandbox Code Playgroud)

......会继续工作.如果要为字符串的第一个字符使用字符代码值,请使用String#ord:

puts "It's a boy!" if my_string[0].ord == 89
Run Code Online (Sandbox Code Playgroud)

有关更多答案,请参阅此stackoverflow问题.