将所有参数从方法传递到块

时间:2016-10-20 06:07:14

标签: ruby

我有一个Ruby方法和一个块配置如下:

def control; yield(1,2,3); end
calc = -> (a,b,c) { a + b+ c }

现在,我想将control方法的yield中的所有参数传递给calc块,如下所示:

control{|a,b,c| calc[a,b,c]}
control{|*args| calc[*args]}  # another succint way to write that.
# => 6

是否有更可读的方式/语法来编写相同的?可能,如下所示:

control.passthru(:calc)
control(&:calc) # this won't work I know, but still is more readable to me
control.yield[calc]
calc.call(*control.yielded_params)

1 个答案:

答案 0 :(得分:0)

我不确定为什么你认为它更具可读性,但是你走了:

control &calc
#⇒ 6

control(&:calc)无法正常工作,因为它会在Symbol#to_proc符号上调用:calc。您可能希望通过λ⇒直接传递它。