class MethodCallDelayer

メソッド呼び出しを遅延する。 呼び出すメソッドのオブジェクト部分をこのオブジェクトに置き換えると、そのメソッド呼び出しが 記録され、MethodCallDelayer#call が呼ばれたときに、callの引数をオブジェクトとして評価が開始される。

f = function.map{ |x| x + 1 }.join(', ')
f.call([1, 2, 3]) # => "2, 3, 4"

Public Class Methods

new() click to toggle source
# File core/lib/lazy.rb, line 66
def initialize
  @callstack = lambda{ |x| x } end

Public Instance Methods

call(obj) click to toggle source

obj をselfとして評価を開始する。

# File core/lib/lazy.rb, line 76
def call(obj)
  to_proc.call(obj) end
method_missing(*args, &block) click to toggle source
# File core/lib/lazy.rb, line 69
def method_missing(*args, &block)
  callstack = @callstack
  @callstack = lambda{ |x|
    callstack.call(x).__send__(*args, &block) }
  self end
to_proc() click to toggle source

Procオブジェクトにして返す。 ブロック引数としてこのオブジェクトを渡した場合に内部で呼ばれる。

# File core/lib/lazy.rb, line 81
def to_proc
  @callstack end