为什么字符串索引返回整数值而不是字符?

Kev*_*vin 3 ruby bash executable

看起来,当将Ruby代码放在可执行脚本中时,String的索引行为与IRB中的行为不同,或者直接运行Ruby代码.例如:

$ cat > test
#!/usr/bin/ruby -w
puts 'hello'[0]
$ chmod +x test
$ ./test
104
$ ruby -e "puts 'hello'[0]"
h
Run Code Online (Sandbox Code Playgroud)

为什么是这样?而且,如何使可执行脚本的行为与"普通"Ruby代码相同?

the*_*Man 6

在1.9之前,Ruby返回单个字符的ASCII字符代码.1.9+切换到返回角色本身:

irb(main):001:0> RUBY_VERSION
=> "1.8.7"
irb(main):002:0> 'foo'[0]
=> 102
irb(main):001:0> RUBY_VERSION
=> "1.9.3"
irb(main):002:0> 'foo'[0]
=> "f"

使用常量RUBY_VERSION是快速调试此类问题的好方法.