この例は少し工夫されていますが、テストからのものであるため、このように機能し、実際のライブラリでこれを使用する方法を理解するのに役立ちます。私は次のように定義されたラムダを持っています:
l = lambda { |v| process(v) }
これをオブジェクトに渡し、そのオブジェクトのコンテキストでprocを実行したいと思います。オブジェクトは次のようになります。
class LambdaRunner
def process(v)
puts v
end
def run(proc)
# code to run proc in the context of the object
end
end
私はinstance_evalを使用してprocを実行するソリューションに精通しています。
instance_eval(&proc)
しかし、procに値を渡す必要があるため、これは機能しません。私は実用的なソリューションのようなものを管理しましたが、それはハッキーでエラーが発生しやすいと感じています。
self.class.class_eval do
define_method(:runner, &proc)
end
runner('hi from lambda runner')
他のすべての方法はundefined method process