繁体   English   中英

如何将 (2-∞) 参数传递给 ruby​​ 方法?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM