Ruby错误:无法将数组强制为Fixnum

Ruby错误:无法将数组强制为Fixnum,ruby,Ruby,我目前正在研究一种简单的乘法方法 代码: 输出: *“:无法将数组强制为Fixnum TypeError 来自计算器。rb:26:inblock in multiply' 来自计算器。rb:24:每个' 来自计算器。rb:24:inmultiply' 来自计算器。rb:31:in`' 我得到这个错误。似乎该方法不允许我使用。数组中的每个 另外,我希望将参数保留为*数字,以防它不是一个数组,而是两个要相乘的数字。我应该提醒您注意,当传递的参数是两个数字而不是一个数组(即乘法2,4)时,该方法可以正

我目前正在研究一种简单的乘法方法

代码:

输出:

*“:无法将数组强制为Fixnum TypeError 来自计算器。rb:26:inblock in multiply' 来自计算器。rb:24:每个' 来自计算器。rb:24:inmultiply' 来自计算器。rb:31:in`'

我得到这个错误。似乎该方法不允许我使用。数组中的每个


另外,我希望将参数保留为*数字,以防它不是一个数组,而是两个要相乘的数字。我应该提醒您注意,当传递的参数是两个数字而不是一个数组(即乘法2,4)时,该方法可以正常工作!我意识到当使用*args传递数组时,它会变成数组的and数组。

问题不同。每次迭代参数列表时,使用乘法[2,3,4,5]传递一个参数,即数组。参数列表为[[2,3,4,5]]。因此,在唯一的迭代中,您将尝试:

1 *= [2, 3, 4, 5]
这对Ruby基本上没有意义,因此它会抛出一个错误

您应该使用参数列表而不是数组参数调用multiply方法:

倍数2,3,4,5

然后它就会工作。

乘法需要任意数量的参数。您只传递一个参数,即数组。在第一次迭代中,number是整个数组。因此出现了错误消息

你也得修电话

 multiply(*[2, 3, 4, 5])
或者更简单一点

 multiply(2, 3, 4, 5)

如果希望能够使用数组作为输入,可以使用数字数组上的“展平”方法

展平方法将采用二维阵列,并将其转换为简单阵列

这也会起作用

multiply([2, 3, 4, 5], 2, 2) #=> 480
在这种情况下,

numbers = [[2, 3, 4, 5], 2, 2]
应用展平方法后,您将获得

[2, 3, 4, 5, 2, 2]
然后你可以开始把每个数字相乘

在Ruby中,这是很正常的,通常有一种方法可以完成您想要做的事情。在这种情况下,inject和reduce可以实现您所寻找的目标

def multiply(*numbers)
    numbers.flatten.reduce(&:*)
end
[2, 3, 4, 5, 2, 2]
def multiply(*numbers)
    numbers.flatten.reduce(&:*)
end