stackoverflow.com にスタック オーバーフローの質問を投稿すると、なんと面白いことでしょう :-)
再帰的な Ruby コードをいくつか実行していますが、次の結果が得られます。"Stack level too deep (SystemStackError)"
(私はコードが機能することを確信しています。私は無限の再帰的な死のスパイラルに陥っていませんが、とにかくそれはポイントではありません)
私のRubyアプリの許可されたスタックの深さ/サイズを変更する方法はありますか?
これが Ruby の制限であるかどうかはよくわかりません。エラーに「スタック レベル」と表示されているため、Ruby が何らかの方法でスタックの「レベル」をカウントしているように見えるからです。
このプログラムを Vista と Ubuntu の両方で実行してみましたが、結果は同じでした。Ubuntu では、「ulimit -s」でスタック サイズを 8192 から 16000 に変更しようとしましたが、何も変わりませんでした。
編集:フィードバックをありがとう。
再帰関数を使用することは、おそらく最も堅牢な方法ではないことを認識しています。しかし、それも重要ではありません。スタックサイズを増やす方法があるのだろうか..期間。そして、私が述べたように、ルビースクリプトを実行する前に ulimit -s 16000 を実行しようとしました..改善はありません..私はそれを間違って使用していますか?
Edit2:実際には、コードのエッジケースで無限再帰が発生していました。
エラーが発生したときの切り捨てられた ruby スタック トレース"Stack level too deep"
は、少し誤解を招きます。
いくつかの関数を含む再帰動作を行うと、再帰の回数が実際よりもはるかに少ないという印象を受けます。この例では、190 回を少し超える呼び出しの後にクラッシュする可能性がありますが、実際には約 15000 回の呼び出しです。
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
-アンドレアス