我正在尝试将任意数量的未知参数相乘以求和。
def multiply(*num)
num.each { |i| puts num * num}
end
multiply(2,3,4)
multiply(2,3,4,5,6,7)
另一个尝试:
def multiply(num)
num.to_i
i = 0
while i < num.length
total = num * num
return total
end
end
multiply(2,3,4)
multiply(2,3,4,5,6,7)
我一直遇到错误: (eval):73: main:Object (NameError) 的未定义局部变量或方法“num_” 来自(评估):81
有人说 Array 需要是 Integer。
我尝试过做一些我认为应该是非常简单的程序来编写。
最佳答案
def multiply(*num)
捕获数组中方法的所有参数。如果您运行 multiply(1, 2, 3, 4)
,则 num
将等于 [1, 2, 3, 4]
。因此,在您的两次尝试中,您都试图将整个数组与自身相乘 (num * num
),这是行不通的。
其他人提出了如何正确编写 multiply 方法的解决方案,但让我给你一个你第一次尝试的正确版本并正确解释它:
def multiply(*numbers)
result = 1
numbers.each { |n| result = result * n }
result
end
在您的尝试中,我将所有参数捕获到一个数组中,我将其称为numbers
。然后我声明一个变量来保存所有乘法的结果。给它 1
的值很方便,因为它不会影响乘法,但我也可以将 numbers
数组的第一个值移开,还有其他解决方案。
然后我用 each
遍历所有数字,对于每个数字,我将它与当前结果相乘并将其存储为新结果(我可以用 result 写得更短*= n
).
最后我返回结果(方法的最后一个值是该方法将返回的值)。
做同样的事情有更短的方法,其他人建议使用 numbers.reduce { |n, result| n * result }
,甚至是 numbers.reduce(:*)
,但即使它们更短,它们也很神秘,我认为它们并不能真正帮助你完成工作.
关于Ruby:如何将多个数字相乘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15044834/