我对这种方法中的星星有疑问:
def multiplies_array(*numbers)
numbers.inject(1, :*)
end
参数列表 ( *numbers
) 中的星号是什么意思?冒号 ( ) 后面的星号是什么意思1, :*
?
第一颗星是 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 魔法有一点启发:)
请参阅注入的文档。
它“通过应用二进制操作来组合枚举的所有元素,该操作由命名方法或运算符的块或符号指定。”
因此,在The中指定:*
乘法运算符将其指定为符号,但您也可以这样做。使用符号更为惯用。numbers.inject(1, :*)
:*
numbers.inject(1, '*')