2015-01-13 90 views
1

我想執行以下代碼:堆棧層次過深:SystemStackError

class Array 

    def each 
     for i in self 
      yield(i) 
     end 
    end 

end 

[1,2,3,4].each {|i| puts i*i} 

當我運行這段代碼我得到以下錯誤:

stack level too deep (SystemStackError) 

但下面的代碼成功執行:

class Array 

    def each 
      yield(self[0]) 
      yield(self[1]) 
      yield(self[2]) 
      yield(self[3]) 
    end 

end 

[1,2,3,4].each {|i| puts i*i} 

輸出:

1 
4 
9 
16 
+2

我想這是因爲'對... in'使用'內部each'所以你正在創建遞歸。嘗試命名您的方法,以免與內置方法衝突。 –

+0

是的,如果我把'each'改爲'aech' –

+1

如果這個練習的要點是要學習如何自己實現'each',那麼你只是在作弊。你基本上只是再次調用內置的'each',只是僞裝成'for' /'in'。 –

回答

相關問題