【问题标题】:Running a passed proc with params inside a class instance in ruby在 ruby​​ 的类实例中运行带有参数的传递过程
【发布时间】:2013-03-22 06:21:09
【问题描述】:

这个例子有点做作,但它来自一个测试,所以它只是以这种方式工作,并将帮助我弄清楚如何在实际的库中使用它。我有一个 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

【问题讨论】:

    标签: ruby proc


    【解决方案1】:

    请参阅instance_exec 的文档(已向后移植到 1.8.7)。假设您的 proc 采用单个参数 |v|,您可能会在 LambdaRunner 中得到类似的结果。

    定义运行(过程) instance_exec(v_value, &proc) 结尾

    顺便说一句,在没有#instance_exec 的 Ruby 版本中,你的 hack 基本上是实现它的唯一方法。这就是我 implemented it 对于没有反向移植方法的旧红宝石的方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-28
      • 1970-01-01
      • 1970-01-01
      • 2018-04-23
      • 2011-10-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多