给定一个参数数组,如何将这些参数发送到Ruby中的特定函数?


70

原谅初学者的问题,但说我有一个数组:

a = [1,2,3]

还有某处的功能;假设这是一个实例函数:

class Ilike
  def turtles(*args)
    puts args.inspect
  end
end

我该如何调用Ilike.turtlesa就像在打电话一样(Ilike.new).turtles(1,2,3)

我熟悉send,但这似乎并没有将数组转换为参数列表。

我正在寻找的apply与之类似的Javascript等效于call但将数组转换为参数列表。

Answers:


130

如您所知,定义方法时,可以使用将*参数列表转换为数组。同样,在调用方法时,可以使用将*数组转换为参数列表。因此,在您的示例中,您可以执行以下操作:

Ilike.new.turtles(*a)

4
太棒了 根据您的出色回答,我在Wikibooks中找到了对该技术的更详尽的介绍。考虑到并行表示法是另一种方式,这实际上是完全合理的。哦,确实是露比。我还注意到,您可以a.unshift使用来添加自己的参数而不会Ilike.new.turtles(1,2,3,*a)感到烦躁,尽管使用postpending似乎需要这样的操作。
史蒂文

1
@StevenXu在Ruby 1.9中,您也可以使用'postpending'。a=[1,2]; b=[4,5]; p(0,*a,3,*b,6) #=> "0\n1\n2\n3\n4\n5\n6"
Phrogz

疯狂地回答!
RubyFanatic 2014年

这是一个有趣的技术:some_func(*'some string of args'.split)
Dennis Williamson
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.