Procにする
proc_call.rb
def add(n, acc = 0) return acc if n == 0 Proc.new { add(n - 1, acc + n) } end def lazy_call(val) while val.instance_of?(Proc) val = val.call end val end p lazy_call(add(100000000))
実行
irb(main):001:0> require './proc_call.rb' 5000000050000000 => true
Enumerator::Lazy
を使う
しょかん
遅延評価、末尾呼び出し最適化などはちゃんとまとめておきたい