我试图将任意数量的未知参数相乘以形成总数.
def multiply(*num)
num.each { |i| puts num * num}
end
multiply(2,3,4)
multiply(2,3,4,5,6,7)
Run Code Online (Sandbox Code Playgroud)
另一种尝试:
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)
Run Code Online (Sandbox Code Playgroud)
我一直遇到错误:( eval):73:未定义的局部变量或方法`num_'for main:Object(NameError)from(eval):81
有人说Array需要是Integer.
我已经尝试过做一些我认为是非常简单的程序编写的东西.
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
Run Code Online (Sandbox Code Playgroud)
在你的尝试中我捕获数组中的所有参数,我称之为我的numbers.然后我声明一个变量,它将保存所有乘法的结果.赋予它值1是方便的,因为它不会影响乘法,但我也可以从numbers数组中移出第一个值,还有其他解决方案.
然后我用所有数字迭代each,并且对于每个数字,我将它与当前结果相乘并将其存储为新结果(我可以写得更短result *= n).
最后我返回结果(方法的最后一个值是方法返回的内容).
有更短的方法做同样的事情,其他人建议使用numbers.reduce { |n, result| n * result },甚至numbers.reduce(:*),但即使他们更短,他们是非常神秘,我认为他们并没有真正帮助你让事情发挥作用.