2013-03-12 88 views
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 2013-03-12 09:04:54

+1

聽起來像這兩個答案爲你工作。您應該接受其中的一個,以便將來訪問此頁面的人員知道哪一個最有效。 (並讓回答者高興)。 – vlasits 2013-03-12 11:55:07

回答

6

此前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是快速調試此類問題的好辦法。

2

打字時ruby,你是sur你使用的是/usr/bin/ruby?您的$ PATH中可能有不同版本的ruby,優先於此版本。

我不太清楚這一點,但我不會感到驚訝,如果String#[]有不同的回報無論您使用的是紅寶石1.8或1.9

+0

是的,我剛剛檢查,我的系統Ruby是1.8.7。在我的可執行文件中使用#!/ usr/bin/env ruby​​(我使用rvm並將其設置爲1.9.3)時,結果如預期。非常感謝!!! – Kevin 2013-03-12 09:06:19

相關問題