在stackoverflow上发布堆栈溢出问题.com,多有趣啊:-)

我运行了一些递归Ruby代码,得到了:"Stack level too deep (SystemStackError)"

(我很确定代码是有效的,我不是在一个无限的递归死亡螺旋中,但这不是重点.)

我的Ruby应用程序是否需要更改允许的堆栈深度/大小?

我不太明白这是否是Ruby中的一个限制,因为错误是"Stack level",这给我的印象是Ruby以某种方式计算堆栈的"levels",或者它只是意味着堆栈已满.

我试着在Vista和Ubuntu下运行这个程序,结果是一样的.

编辑:

编辑2:

tst.rb:8:in `p': stack level too deep (SystemStackError)
        from tst.rb:8:in `bar'
        from tst.rb:12:in `bar'
        from tst.rb:19:in `foo'
        from tst.rb:10:in `bar'
        from tst.rb:19:in `foo'
        from tst.rb:10:in `bar'
        from tst.rb:19:in `foo'
        from tst.rb:10:in `bar'
         ... 190 levels...
        from tst.rb:19:in `foo'
        from tst.rb:10:in `bar'
        from tst.rb:19:in `foo'
        from tst.rb:22

-安德烈亚斯

推荐答案

Ruby使用C堆栈,因此您可以 Select 使用ulimit或使用一些编译器/链接器堆栈大小标志编译Ruby.尾部递归尚未实现,Ruby目前对递归的支持也不太好.作为凉爽优雅的递归,您可能需要考虑如何应对语言的局限性,并以不同的方式编写代码.

Ruby相关问答推荐

为什么 rdoc 注释似乎以两个井号/井号符号开头?

Ruby中带和不带下划线_的方法参数有什么区别

从 URL 字符串中提取主机的 Ruby 代码

Faraday中的timeout和open timeout是什么?

从索引到字符串结尾的子字符串的Ruby成语

osx bash上的树命令

如果尚未定义,则设置 Ruby 变量

Ruby 中的 -> (stab) 运算符是什么?

在 Pry 中有相当于 next 的吗?

Ruby Koan 151 引发异常

线程安全:Ruby 中的类变量

如何设置方法测试中使用的私有实例变量?

RSpec allow/expec vs expect/and_return

Ruby 中的标准文件命名约定

Ruby 模板:如何将变量传递到内联 ERB?

如何使用密码保护我的 /sidekiq 路由(即需要对 Sidekiq::Web 工具进行身份验证)?

我安装了一个 gem,但 require 'gemname' 不起作用.为什么?

在类方法中使用实例变量 - Ruby

为什么我们在 Ruby 中有 0.0 和 -0.0?

def `self.function` 名称是什么意思?