【问题标题】:stack level too deep : SystemStackError堆栈级别太深:SystemStackError
【发布时间】: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


【解决方案1】:

for 循环在后台调用 each

参考:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-10
    • 2013-10-05
    • 2014-10-25
    • 2017-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多