Ruby 调用闭包和splats

Ruby 调用闭包和splats,ruby,Ruby,使用yield\u self,一元方法的参数可以预先放置在方法链中。因此,鉴于: Foo = Struct.new(:one_arg) Foo = Struct.new(:x, :y) args = [:first_arg, :second_arg] 这一行: Foo.new("x") Foo.new(*args) 相当于该行: "x".yield_self(&Foo.method(:new)) 如果提供了一个接受多个参数的方法和一个数组,每个数组的元素都对应于该方法的一个参数

使用
yield\u self
,一元方法的参数可以预先放置在方法链中。因此,鉴于:

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

Foo.new("x")
Foo.new(*args)
相当于该行:

"x".yield_self(&Foo.method(:new))
如果提供了一个接受多个参数的方法和一个数组,每个数组的元素都对应于该方法的一个参数,那么这种类比就不起作用了。因此,鉴于:

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

Foo.new("x")
Foo.new(*args)
不等同于:

args.yield_self(&Foo.method(:new))
Foo.new(args)
这相当于:

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

但我宁愿写这样的东西。有没有什么惯用的方法可以通过这种方式实现阵列布局?

我认为这是您能做的最好的方法:

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

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

是的,也许你是对的,这是唯一的方法,但我喜欢
屈服自我
方法相结合的一点是,它使编写某种程度上“无点”的代码变得容易。这个解决方案不是这样的。