看起来,在可执行脚本中放置Ruby代码时,字符串的索引与在IRB中或直接运行Ruby代码时的表现不同。例如:
$ cat > test
#!/usr/bin/ruby -w
puts 'hello'[0]
$ chmod +x test
$ ./test
104
$ ruby -e "puts 'hello'[0]"
h
为什么会这样?如何使可执行脚本的行为与“普通”Ruby代码相同?
看起来,在可执行脚本中放置Ruby代码时,字符串的索引与在IRB中或直接运行Ruby代码时的表现不同。例如:
$ cat > test
#!/usr/bin/ruby -w
puts 'hello'[0]
$ chmod +x test
$ ./test
104
$ ruby -e "puts 'hello'[0]"
h
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
时,您确定正在使用的是/usr/bin/ruby
吗?你的$PATH路径中可能有一个不同版本的ruby会优先于这个。
我不太确定,但如果您使用ruby 1.8或1.9,String#[]
返回值可能会有所不同。