ruby
2012-06-19 63 views 2 likes 
2

IRB和Ruby如何執行某些表達式有區別嗎?爲什麼我在IRB和腳本中獲得不同的結果?

這些表達式在IRB中以及從命令行運行時會產生不同的結果。問題是,哪一個是正確的?

IRB:

>> s = 'hello' 
=> "hello" 
>> s.size 
>> s[s.length] = '!' 
IndexError: index 5 out of string 
    from (irb):31:in `[]=' 
    from (irb):31 
>> 

而在正常的腳本:

s = 'hello' 
s[s.length] = '!' 
puts s 

laptop user$ ./prgruby.rb 
hello! 
+0

第一個從irb提示符爲我工作。 Windows上的ruby 1.9.2p0。 –

+0

1.9.2p290/OSX,既不拋出異常。 – Amadan

+3

也許這些腳本運行在不同的ruby中。在運行時通過打印ruby版本來檢查它。 – megas

回答

1

HereString#[]1.8.7商務部:

str[fixnum] = fixnum 

是採取一個Fixnum的形式將引發IndexError i F的值 超出範圍

Here1.9.3同一文檔:相同的定義存在

試驗後,發生什麼用Ruby 1.9.3是s.length不超出範圍分配。這是有意義的,它是字符串的結尾:你不必任意填充缺失的索引,但我想它可能是或應該記錄在某處?

+0

是的,我發現這些字符串替換/分配/切片操作有點奇怪。例如:s [s.size,1]返回空字符串,即使我們正在查看範圍 - 除非字符串是用'\ 0'字符在C中完成的。 s [s.size + 1,1]另一個返回nil,這可以確認「字符串最終化」理論...無論如何,如果有人可以給我一些提示,這裏... – gyre

相關問題