Ruby 请解释一下这个方法

Ruby 请解释一下这个方法,ruby,inject,splat,Ruby,Inject,Splat,我有一个关于这种方法中的星星的问题: def multiplies_array(*numbers) numbers.inject(1, :*) end 参数列表中的星号(*numbers)是什么意思? 冒号(1,:*)后面的星号是什么意思?第一个星号是splat操作符。在这种情况下,它“收集”给定给乘\u数组的所有参数,并将其放入单个数组中 用四个参数这样调用它 multiplies_array 1, 2, 3, 4 。。。在方法中提供一个包含四个元素的数组 这相当于: def mult

我有一个关于这种方法中的星星的问题:

def multiplies_array(*numbers)
  numbers.inject(1, :*)
end
参数列表中的星号(
*numbers
)是什么意思?
冒号(
1,:*
)后面的星号是什么意思?

第一个星号是splat操作符。在这种情况下,它“收集”给定给
乘\u数组的所有参数,并将其放入单个数组中

用四个参数这样调用它

multiplies_array 1, 2, 3, 4
。。。在方法中提供一个包含四个元素的数组

这相当于:

def multiplies_array(numbers) # Without splat operator
end 

multiplies_array [1, 2, 3, 4]
第二颗星有点让人困惑。这里乘法运算符的含义是:

表示符号。所有可枚举的
方法都允许将符号作为快捷方式传递。它的意思是:“使用此名称调用方法”

换句话说,
*
方法应用于数字数组中的每个项目。如果没有符号快捷方式,则该行的外观如下所示:

numbers.inject(1) { |result, number| result * number) }

我希望这能让大家了解一下Ruby的魔力:)

第一颗星是splat操作符。在这种情况下,它“收集”给定给
乘\u数组的所有参数,并将其放入单个数组中

用四个参数这样调用它

multiplies_array 1, 2, 3, 4
。。。在方法中提供一个包含四个元素的数组

这相当于:

def multiplies_array(numbers) # Without splat operator
end 

multiplies_array [1, 2, 3, 4]
第二颗星有点让人困惑。这里乘法运算符的含义是:

表示符号。所有可枚举的
方法都允许将符号作为快捷方式传递。它的意思是:“使用此名称调用方法”

换句话说,
*
方法应用于数字数组中的每个项目。如果没有符号快捷方式,则该行的外观如下所示:

numbers.inject(1) { |result, number| result * number) }
我希望这能为所有的Ruby魔法提供一点启示:)

有关详细信息,请参阅文档

它“通过应用二进制操作组合枚举的所有元素,二进制操作由命名方法或运算符的块或符号指定。”

因此,
:*
数字中指定乘法运算符。inject(1,:*)
这个
:*
将它指定为一个符号,但您也可以执行
数字。inject(1,“*”)
。使用符号更为惯用。

有关详细信息,请参阅文档

它“通过应用二进制操作组合枚举的所有元素,二进制操作由命名方法或运算符的块或符号指定。”


因此,
:*
数字中指定乘法运算符。inject(1,:*)
这个
:*
将它指定为一个符号,但您也可以执行
数字。inject(1,“*”)
。使用符号更为惯用。

第一个是“splat操作符”,用谷歌搜索它。第二个是常规符号(阅读
Enumerable#inject
上的文档。第一个是“splat操作符”,谷歌搜索它。第二个是常规符号(阅读
Enumerable#inject
上的文档。另一个小问题。除非%w(和以上)。包括?(字符串[索引])什么是%w?@johnogy将其作为一个不同的问题发布。什么是
%w
?另一个小问题。除非%w(和以上)。包含?(字符串[索引])什么是%w?@johnogy将其作为一个不同的问题发布。什么是
%w