访问Ruby块中的方法

时间:2013-12-23 13:41:32

标签: ruby

我有一个作为参数传递给函数的块。该块包含几种方法。就像这样:

def func(&block)
end

func do
  method1
  method2(arg)
  method3(arg)
end

我希望func返回块中函数的组成:

method3 ( method2 ( method1 ) )

有没有办法访问块中的每个方法,所以我可以使用methods.reduce(method1) { |method| method.call arg }或类似的东西?

你能给我一些想法吗?

1 个答案:

答案 0 :(得分:3)

不,这是不可能的。您(理论上)可以解析与块定义关联的Ruby代码,但我不确定这是否有意义。

您的问题非常通用,如果您对块有控制权,则不提供任何详细信息,而现实世界的示例可能会更有帮助。

根据我的详细信息,我的建议是你应该在原点拆分块。不是传递包含所有这些方法的整个块,而是将方法数组作为参数传递,以便您可以根据需要重用它们。

您可以将它们包装在lambda中,以延迟执行。

def func(*chain)
end

func(
  ->(arg) { method1 },
  ->(arg) { method2(arg) },
  ->(arg) { method3(arg) }
)

您还可以使用Object.method获取方法并将其作为参数传递。

def func(*chain)
end

func(
  method(:method1),
  method(:method2),
  method(:method3)
)