我今天看到了一个ruby代码片段.
[1,2,3,4,5,6,7].inject(:+)
Run Code Online (Sandbox Code Playgroud)
=> 28
[1,2,3,4,5,6,7].inject(:*)
Run Code Online (Sandbox Code Playgroud)
=> 5040
这里的注射与我之前看到的完全不同,比如
[1,2,3,4,5,6,7].inject {|sum, x| sum + x}
Run Code Online (Sandbox Code Playgroud)
请解释它是如何工作的?
没有魔力,符号(方法)只是可能的参数之一.这是来自文档:
# enum.inject(initial, sym) => obj
# enum.inject(sym) => obj
# enum.inject(initial) {| memo, obj | block } => obj
# enum.inject {| memo, obj | block } => obj
Run Code Online (Sandbox Code Playgroud)
我们的情况是第二个.
您也可以使用传统块重写它:
op = :+ # parameter of inject call
[1,2,3,4,5,6,7].inject {|sum, x| sum.send(op, x)} # also returns 28
Run Code Online (Sandbox Code Playgroud)
(回答"它是如何工作的"部分)