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

问题描述:

将Ruby代码放入可执行脚本时,似乎字符串的索引与IRB中的行为不同,或者直接运行Ruby代码。例如:为什么一个字符串索引返回一个整数值而不是一个字符?

$ cat > test 
#!/usr/bin/ruby -w 
puts 'hello'[0] 
$ chmod +x test 
$ ./test 
104 
$ ruby -e "puts 'hello'[0]" 
h 

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

+2

运行不同的ruby版本? – oldergod 2013-03-12 09:04:54

+1

听起来像这两个答案为你工作。您应该接受其中的一个,以便将来访问此页面的人员知道哪一个最有效。 (并让回答者高兴)。 – vlasits 2013-03-12 11:55:07

此前1.9,红宝石返回字符的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是快速调试此类问题的好办法。

打字时ruby,你是sur你使用的是/usr/bin/ruby?您的$ PATH中可能有不同版本的ruby,优先于此版本。

我不太清楚这一点,但我不会感到惊讶,如果String#[]有不同的回报无论您使用的是红宝石1.8或1.9

+0

是的,我刚刚检查,我的系统Ruby是1.8.7。在我的可执行文件中使用#!/ usr/bin/env ruby​​(我使用rvm并将其设置为1.9.3)时,结果如预期。非常感谢!!! – Kevin 2013-03-12 09:06:19