更新が来なかったけど、e-shop から 3.5.2 にしました。
def f i
? i
f i+1
end
f 0
を実行して def の呼び出し深度を確認したら、i=2046 まで動いてびっくり。
で、3.3.2 で調べたら同じく i=2046 でした。
以前は 32 くらいだったと思ったのですが、いつからこんなに深くなったのでしょうか???
option strict でも未定義関数の呼び出しはチェックしませんよね。
互いに呼び出しあうような f と g があったとすると
def f
g
end
def g
f
end
どっちを先に書いても、未定義関数を呼び出すことになってしまいます。
しかも回避方法が存在しない。
option strict が未定義関数チェックをしないのは、もしかしたらこれが理由かもしれませんね。
同じワンパスコンパイラである Pascal ではこれを解決するために forward という命令を用意して、
forward g
で g という関数を前もって宣言できるようになっています。