似乎当将 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 代码相同?
似乎当将 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 代码相同?
在 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
是快速调试此类问题的好方法。
打字时ruby
,你确定你在用/usr/bin/ruby
吗?您的 $PATH 中可能有不同版本的 ruby 优先于这个。
我不太确定这一点,但如果String#[]
您使用 ruby 1.8 或 1.9 有不同的回报,我不会感到惊讶