给定一组参数,如何将这些参数发送到 Ruby 中的特定函数?
Posted
技术标签:
【中文标题】给定一组参数,如何将这些参数发送到 Ruby 中的特定函数?【英文标题】:Given an array of arguments, how do I send those arguments to a particular function in Ruby? 【发布时间】:2011-06-06 07:25:21 【问题描述】:请原谅初学者的问题,但说我有一个数组:
a = [1,2,3]
还有一个函数;假设它是一个实例函数:
class Ilike
def turtles(*args)
puts args.inspect
end
end
如何像调用 (Ilike.new).turtles(1,2,3)
一样调用 Ilike.turtles
和 a
。
我熟悉send
,但这似乎无法将数组转换为参数列表。
与我正在寻找的类似是 javascript apply
,它等同于 call
,但将数组转换为参数列表。
【问题讨论】:
【参考方案1】:如您所知,当您定义方法时,您可以使用*
将参数列表转换为数组。同样,当您调用方法时,您可以使用*
将数组转换为参数列表。所以在你的例子中你可以这样做:
Ilike.new.turtles(*a)
【讨论】:
太棒了。根据您的出色回答,我在Wikibooks 中找到了对该技术的更全面说明。这实际上是完全合理的,因为并行符号是另一种方式。哦,确实是鲁比。我还注意到,您可以使用Ilike.new.turtles(1,2,3,*a)
在前面添加自己的参数,而不会让 a.unshift
烦躁不安,尽管后置似乎需要这样的操作。
@StevenXu 在 Ruby 1.9 中,您还可以为 'postpending' 打招呼。 a=[1,2]; b=[4,5]; p(0,*a,3,*b,6) #=> "0\n1\n2\n3\n4\n5\n6"
完美回答!
这是一个有趣的技巧:some_func(*'some string of args'.split)
以上是关于给定一组参数,如何将这些参数发送到 Ruby 中的特定函数?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 dryRun 参数发送到 pandas.read_gbq 函数
如何使用格式化程序将参数发送到操作:MVC 中 jqGrid 4.6.0 中的“showlink”