gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 17:44:47 25 4
gpt4 key购买 nike

我正在做一个非常简单的练习:一种可以在两个和无限数量的 float 之间相乘的方法。我这样做的第一个想法是使用 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

关于ruby - 如何将 (2-∞) 个参数传递给 ruby​​ 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42015096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com