2016-02-13 52 views
1

我在Ruby的新手,我想不通爲什麼當我運行這個Ruby腳本,數字類和方法的缺失

class Numeric 
def method_missing(arg) 
    puts self 
    end 
end 

puts 5 

返回

[...] 
5 

我認爲自己應該只返回[...],因爲沒有參數傳入。

謝謝!

+0

順便說一句,你爲什麼* 「認爲自己應該只返回'[...]'」 *?起初我很驚訝。 – Stefan

+0

我以爲''[']'意味着紅寶石數組。所以我認爲它應該返回一個空數組。 –

+0

有趣的問題! –

回答

4

puts以特殊方式處理數組。因此,puts 5嘗試呼叫5.to_ary,並在執行method_missing時,它使用參數:to_ary進行調用。

method_missing以內您可以撥打puts self,相當於puts 5。這是Ruby顯示爲[...]的遞歸。

這遞歸陣列產生相同的輸出:

ary = [] 
#=> [] 
ary << ary 
#=> [[...]] 
+0

所以'puts 5'中的'5'被視爲ruby中的數組? –

+0

是的,因爲'5'響應'to_ary'(通過'method_missing') – Stefan

+0

'[...]'這是什麼意思?我的猜測是,這是一遍又一遍地調用自己的遞歸。那麼這很多'5'? –