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

3

看起来,在可执行脚本中放置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
1
听起来这两个答案对你有用。你应该接受其中一个,这样未来访问此页面的访客就会知道哪个答案最好。(并让回答者感到高兴)。 - vlasits
2个回答

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是快速调试此类问题的好方法。

2

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

我不太确定,但如果您使用ruby 1.8或1.9,String#[]返回值可能会有所不同。


是的,我刚刚检查了一下,我的系统 Ruby 是 1.8.7。在我的可执行文件中使用 #!/usr/bin/env ruby(我使用 rvm 并将其设置为 1.9.3),结果如预期。非常感谢!!! - Kevin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接