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

时间:2013-03-12 08:57:22

标签: 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

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

2 个答案:

答案 0 :(得分: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是快速调试此类问题的好方法。

答案 1 :(得分:2)

在输入ruby时,您是否正在使用/usr/bin/ruby?你的$ PATH中可能有不同版本的ruby优先于这个版本。

我对此并不十分肯定,但如果String#[]使用红宝石1.8或1.9

{{1}}有不同的回报,我不会感到惊讶