1

我对这种方法中的星星有疑问:

def multiplies_array(*numbers)
  numbers.inject(1, :*)
end

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

4

2 回答 2

3

第一颗星是 splat 运算符。在这种情况下,它会将给定的所有参数“收集”multiplies_array到单个数组中。

用四个参数这样调用它......

multiplies_array 1, 2, 3, 4

... 在方法中为您提供一个包含四个元素的数组。

这相当于:

def multiplies_array(numbers) # Without splat operator
end 

multiplies_array [1, 2, 3, 4]

第二颗星有点混乱。这里乘法运算符的意思是:

:表示符号。所有Enumerable方法都允许将符号作为快捷方式传递。它的意思是:“用这个名字调用方法”。

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

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

我希望这对所有 Ruby 魔法有一点启发:)

于 2013-04-09T07:52:30.773 回答
1

请参阅注入的文档。

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

因此,在The中指定:*乘法运算符将其指定为符号,但您也可以这样做。使用符号更为惯用。numbers.inject(1, :*):*numbers.inject(1, '*')

于 2013-04-09T07:54:22.500 回答