在ruby中的类实例中运行带有params的传递过程

时间:2013-03-22 06:21:09

标签: ruby proc

这个例子有点做作,但它来自一个测试,所以它只是这样工作,并将帮助我弄清楚如何在实际的库中使用它。我有一个lambda,定义如下:

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

已满足所有其他方法

1 个答案:

答案 0 :(得分:1)

请参阅instance_exec的文档(这是向后移植到1.8.7)。假设你的proc只需要一个参数|v|,你可能会在LambdaRunner中得到类似的结果。

  def run(proc)
    instance_exec(v_value, &proc)
  end

顺便说一下,在没有#instance_exec的Ruby版本中,你的hack基本上是实现它的唯一方法。这就是我implemented it对于那些没有后向移植方法的旧Rubies的方法。