参数数目不限的Ruby函数

参数数目不限的Ruby函数,ruby,variadic-functions,Ruby,Variadic Functions,如何创建一个没有显式参数数的Ruby函数 需要更多说明吗?使用*rest。这里有一个很好的例子。使用splat操作符* def foo(a,b,c,*others) # this function has at least three arguments, # but might have more puts a puts b puts c puts others.join(',') end foo(1,2,3,4,5,6,7,8,9) # prints: #

如何创建一个没有显式参数数的Ruby函数


需要更多说明吗?

使用
*rest
。这里有一个很好的例子。

使用splat操作符
*

def foo(a,b,c,*others)
   # this function has at least three arguments,
   # but might have more
   puts a
   puts b
   puts c
   puts others.join(',')
end
foo(1,2,3,4,5,6,7,8,9)
# prints:
# 1
# 2
# 3
# 4,5,6,7,8,9

下面是关于这个主题的另一篇文章:

给出了一些使用“*”滚动和展开参数的好例子(如果我可以对接受的答案添加注释,我会的,但我没有足够的分数。)


警告:对于处理常规数据的方法,请小心执行此操作。这是一个很好的语法糖块,但是在得到SystemStackError之前,可以传递给方法的参数数量是有限的。我使用redis.mapped\u mget*键达到了这个极限。此外,限制将根据使用splat操作符的位置而变化。例如,在本地运行pry时,我可以将超过130000个元素的数组splat到一个方法中。不过,在赛璐珞演员中运行时,该限制可以小于16000个元素。

此外,这里还有一个有趣的“外观相似”技术,用于传递多个命名参数。它基于这样一个事实,即如果在需要一个位置参数的地方给出,Ruby会将命名参数列表转换为哈希:

def散列参数测试(args={})
p参数
结束
散列参数测试(arg1:val1,arg2:val2)
#=>{:arg1=>“val1”,:arg2=>“val2”}
散列参数测试({arg1:“val1”,arg2:“val2”})
#=>{:arg1=>“val1”,:arg2=>“val2”}

因此,调用该方法的两种方法都提供了(任意数量)元素的散列——无论是显式使用散列语法还是看起来与传递命名参数完全相同的东西。(使用Ruby 2.5.3进行测试)

…并且外部链接已死机。保存了一些版本。