为什么一个字符串索引返回一个整数值而不是一个字符?
问题描述:
将Ruby代码放入可执行脚本时,似乎字符串的索引与IRB中的行为不同,或者直接运行Ruby代码。例如:为什么一个字符串索引返回一个整数值而不是一个字符?
$ cat > test
#!/usr/bin/ruby -w
puts 'hello'[0]
$ chmod +x test
$ ./test
104
$ ruby -e "puts 'hello'[0]"
h
这是为什么?而且,如何让可执行脚本的行为与“普通”Ruby代码相同?
答
此前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
运行不同的ruby版本? – oldergod 2013-03-12 09:04:54
听起来像这两个答案为你工作。您应该接受其中的一个,以便将来访问此页面的人员知道哪一个最有效。 (并让回答者高兴)。 – vlasits 2013-03-12 11:55:07