2015-01-13 53 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'。 –

回答

相关问题