我讀this blog和整個下面的代碼異常會清除堆棧跟蹤什麼?
RunAgain = Class.new(Exception)
def fib(i, n = 1, result = 0)
if i == -1
result
else
raise RunAgain
end
rescue RunAgain
i, n, result = i - 1, n + result, n
retry
end
好像上面的代碼工作,一旦引發異常,然後紅寶石必須清空整個堆棧跟蹤和更換與異常的堆棧來了。
我的理解正確嗎?
如果我要求fibonacci爲一個很大的值,那麼將會出現1000萬個異常。如果所有這些異常信息都保存在堆棧上,那麼堆棧跟蹤錯誤最終將被拋出。因此,我的問題是當下一個異常出現時堆棧跟蹤信息從堆棧中刪除。 – 2010-12-07 20:14:07