3

似乎当将 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 代码相同?

4

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

于 2013-03-12T11:30:49.623 回答
2

打字时ruby,你确定你在用/usr/bin/ruby吗?您的 $PATH 中可能有不同版本的 ruby​​ 优先于这个。

我不太确定这一点,但如果String#[]您使用 ruby​​ 1.8 或 1.9 有不同的回报,我不会感到惊讶

于 2013-03-12T09:04:32.783 回答