看起来,当将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代码相同?
答案 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