我试图将任意数量的未知参数相乘以形成总数。
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:未定义的局部变量或方法`num_'for main:Object(NameError) 来自(评估):81
有人说Array需要是Integer。
我尝试过做一些我认为是非常简单的程序来编写的东西。
答案 0 :(得分:8)
def multiply(*num)
捕获数组中给出方法的所有参数。如果您运行multiply(1, 2, 3, 4)
,那么num
将等于[1, 2, 3, 4]
。因此,在您的两次尝试中,您都试图将整个数组与其自身相乘(num * num
),这是行不通的。
其他人已经提出了如何正确编写乘法方法的解决方案,但是让我给你一个正确版本的第一次尝试并正确解释:
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(:*)
,但即使它们更短,但它们非常神秘,我认为它们并不是真的帮助你完成工作。
答案 1 :(得分:2)
你想要的是#inject方法
def multiple(*nums)
nums.inject(:*)
end
def multiple(*nums)
nums.inject(:*)
end
Inject将使用指定的操作(在本例中为*)组合nums中的所有元素。
答案 2 :(得分:0)
你可以试试这个:
num.reduce(1) {|x, y| x*y }