[英]How do I pass (2-∞) arguments to a ruby method?
我正在做一个非常简单的练习:一种可以在两个和无限数量的浮点数之间相乘的方法。 我这样做的第一个想法是使用 splat 运算符:
def multiply a, b, *rest
a * b * rest
end
那是不成功的。 然后我尝试了这个:
def multiply *numbers
total = 1
numbers.each do |x|
total = total * x
end
total
end
以上几乎是成功的——问题是它会接受一个参数,我希望它至少需要两个。 我怎样才能做到这一点?
有很多选择。 该练习的作者可能打算供您使用的一个是inject
:
def multiply(*numbers)
numbers.inject(&:*)
end
这将导致与您的第二个multiply
实现相同的问题,因为它将接受 0 或 1 个参数。 如果您没有至少两个,则可以通过简单地引发ArgumentError
来解决此问题:
def multiply(*numbers)
raise ArgumentError unless numbers.length >= 2
numbers.inject(&:*)
end
你可以反其道而行之,接受两个实际参数,然后将其余的参数分开,然后简单地构建你打算相乘的完整数组:
def multiply(a, b, *rest)
[a, b, *rest].inject(&:*)
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.