Ruby “是什么?”*&引用;(冒号星)在红宝石中是什么意思?

Ruby “是什么?”*&引用;(冒号星)在红宝石中是什么意思?,ruby,Ruby,查找如何计算数字的阶乘时,我遇到以下代码: (1..5).inject(:*) || 1 # => 120 (:*)|1在做什么 它与这行代码相比如何呢?(1..5).inject(1){| x,y | x*y}#=>120,它使用.inject来实现类似的功能?它是绝对相等的。您可以根据自己的喜好使用每种方法。冒号在Ruby中本身并没有任何意义。它只是一个函数,您可以将一个符号传递给可枚举的方法。该符号命名要在可枚举元素上使用的方法或运算符 例如: (1..5).inject(:*)

查找如何计算数字的阶乘时,我遇到以下代码:

(1..5).inject(:*) || 1 # => 120
(:*)|1
在做什么


它与这行代码相比如何呢?
(1..5).inject(1){| x,y | x*y}#=>120
,它使用
.inject
来实现类似的功能?

它是绝对相等的。您可以根据自己的喜好使用每种方法。

冒号在Ruby中本身并没有任何意义。它只是一个函数,您可以将一个符号传递给可枚举的方法。该符号命名要在可枚举元素上使用的方法或运算符

例如:

(1..5).inject(:*) #=> 1 * 2 * 3 * 4 * 5 = 120
(1..5).inject(:+) #=> 1 + 2 + 3 + 4 + 5 = 15
|1
部分意味着如果
inject
返回一个值,则使用
1
。(在您的示例中,这种情况永远不会发生。)

test.rb:

def do_stuff(binary_function)
  2.send(binary_function, 3)
end

p do_stuff(:+)
p do_stuff(:*)
$ruby test.rb

五,

六,

如果将方法名作为符号传递,则可以通过send调用它。这就是inject和朋友们正在做的事情


关于
| |
部分,如果左侧返回nil或false,
lhs | | 1
将返回1

您还可以将Similar构造传递给其他方法,例如map,each。。。(1..5).map(&:to_s),您还可以阅读about to_proc methodNot execute equals in语句,因为从未使用过
|
1。右手边总是正确的。