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。右手边总是正确的。