调用闭包和splats

时间:2018-02-15 20:30:47

标签: ruby

使用yield_self,可以预先在方法链中放置一元方法的参数。因此,给出:

Foo = Struct.new(:one_arg)

这一行:

Foo.new("x")

相当于该行:

"x".yield_self(&Foo.method(:new))

提供了一个方法,它接受多个参数和一个数组,每个元素对应一个方法的参数,这个类比不起作用。因此,给出:

Foo = Struct.new(:x, :y)
args = [:first_arg, :second_arg]

这一行:

Foo.new(*args)

不等同于:

args.yield_self(&Foo.method(:new))

相当于:

Foo.new(args)

但我宁愿写那样的东西。有没有惯用的方法来实现这种阵列的喷射?

1 个答案:

答案 0 :(得分:2)

我认为这是你能做的最好的事情:

args.yield_self {|ary| Foo.new(*ary)}

这是一条管道,好吧。是否值得所有额外的代码?你决定了。