Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby数组:添加数字的方法_Ruby_Arrays - Fatal编程技术网

Ruby数组:添加数字的方法

Ruby数组:添加数字的方法,ruby,arrays,Ruby,Arrays,我正在尝试编写一段代码,它将获取一个数组并返回数组的和。 首先,这是将数字放入数组的正确方法吗?基于错误,这似乎可能有问题 def total(num) x = [] x << num puts x.inject(0){|a,b|a+b} end 我还记得得到一个错误:无法将fixnum转换为数组您的注入块是正确的。您的参数错误是因为您将该方法定义为接受一个参数,但在您的示例中,您使用四个参数调用它。如果要使用数量可变的参

我正在尝试编写一段代码,它将获取一个数组并返回数组的和。 首先,这是将数字放入数组的正确方法吗?基于错误,这似乎可能有问题

    def total(num)
       x = []
       x << num
       puts x.inject(0){|a,b|a+b}

    end

我还记得得到一个错误:
无法将fixnum转换为数组

您的
注入
块是正确的。您的参数错误是因为您将该方法定义为接受一个参数,但在您的示例中,您使用四个参数调用它。如果要使用数量可变的参数,可以使用splat运算符
*
,它可以执行各种操作-在这种情况下,它将所有未定义的参数收集到一个数组中:

def total(*nums)
  nums.inject(0) {|a,b| a + b }
end

total(3,2,41,2) #=> 48
您可以使用带有
inject
的符号进一步简化此过程:

nums.inject(0, :+) #=> 48
其工作原理是将符号表示的方法发送到累加器,使用数组的每个成员作为参数(相当于将块定义为
{a,b | a.send(:+,b)}

实际上,在这种情况下,不需要定义初始值。Inject有第三种形式,它将简单地使用数组的第一个成员作为初始值,并将其他成员相加:

nums.inject(:+)

嗨@ZachKemp,谢谢你的回答……这很有帮助。我把问题贴错了…我需要的是如果我们调用的总数([3,2,41,2])。请注意区别在于它已经是一个数组。谢谢在这种情况下,您的问题是您已经定义了一个名为
total
的方法,并且正在调用一个名为
sum
的方法吗?此外,如果将数组作为参数提供,则不需要将任何内容推入新数组。只要把
*
从方法中去掉,你就可以开始了。
nums.inject(:+)