Ruby:如何将多个数字相乘?

use*_*064 2 ruby math

我试图将任意数量的未知参数相乘以形成总数.

 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.

我已经尝试过做一些我认为是非常简单的程序编写的东西.

The*_*heo 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
Run Code Online (Sandbox Code Playgroud)

在你的尝试中我捕获数组中的所有参数,我称之为我的numbers.然后我声明一个变量,它将保存所有乘法的结果.赋予它值1是方便的,因为它不会影响乘法,但我也可以从numbers数组中移出第一个值,还有其他解决方案.

然后我用所有数字迭代each,并且对于每个数字,我将它与当前结果相乘并将其存储为新结果(我可以写得更短result *= n).

最后我返回结果(方法的最后一个值是方法返回的内容).

有更短的方法做同样的事情,其他人建议使用numbers.reduce { |n, result| n * result },甚至numbers.reduce(:*),但即使他们更短,他们是非常神秘,我认为他们并没有真正帮助你让事情发挥作用.