我正在进行一项非常简单的练习:一种可以在两个浮点数和一个不确定数量的浮点数之间相乘的方法。我这样做的第一个想法是使用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
以上几乎成功 - 问题是它会接受一个参数,我希望它至少需要两个。我怎样才能做到这一点?
答案 0 :(得分:4)
有很多选择。练习的作者可能打算使用的是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