我有一个作为参数传递给函数的块。该块包含几种方法。就像这样:
def func(&block)
end
func do
method1
method2(arg)
method3(arg)
end
我希望func返回块中函数的组成:
method3 ( method2 ( method1 ) )
有没有办法访问块中的每个方法,所以我可以使用methods.reduce(method1) { |method| method.call arg }
或类似的东西?
你能给我一些想法吗?
答案 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)
)