將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
這是爲什麼?而且,如何讓可執行腳本的行爲與「普通」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
是的,我剛剛檢查,我的系統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