我今天看到了一个 ruby 代码片段。
[1,2,3,4,5,6,7].inject(:+)
=> 28
[1,2,3,4,5,6,7].inject(:*)
=> 5040
这里的注入(inject)和之前看到的完全不一样,比如
[1,2,3,4,5,6,7].inject {|sum, x| sum + x}
请解释一下它是如何工作的?
最佳答案
没有魔法,符号(方法)只是可能的参数之一。这是来自文档:
# enum.inject(initial, sym) => obj
# enum.inject(sym) => obj
# enum.inject(initial) {| memo, obj | block } => obj
# enum.inject {| memo, obj | block } => obj
我们的案例是第二种。
也可以用传统的block重写:
op = :+ # parameter of inject call
[1,2,3,4,5,6,7].inject {|sum, x| sum.send(op, x)} # also returns 28
(回答“它是如何工作的”部分)
关于ruby - 这个 ruby 注入(inject)魔术是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3455627/