【发布时间】:2015-01-13 12:14:02
【问题描述】:
我正在尝试执行以下代码:
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
【问题讨论】:
-
我认为这是因为
for…in在内部使用each,所以你正在创建递归。尝试命名您的方法,以免与内置方法发生冲突。 -
是的,如果我将 'each' 更改为 'aech' 就可以了
-
如果这个练习的目的是学习如何自己实现
each,那么你就是在作弊。你基本上只是再次调用内置的each,只是伪装成for/in。
标签: ruby