Ed *_*ida 4 ruby inject enumerable
看一下课上的Ruby文档,Enumerable我发现了一些有趣的内容,我想知道为什么会这样.
在#inject描述中我发现了这些例子:
# Sum some numbers
(5..10).reduce(:+) #=> 45
# Same using a block and inject
(5..10).inject { |sum, n| sum + n } #=> 45
# Multiply some numbers
(5..10).reduce(1, :*) #=> 151200
# Same using a block
(5..10).inject(1) { |product, n| product * n } #=> 151200
Run Code Online (Sandbox Code Playgroud)
注意,当#inject用于乘法时,它接收初始值1.我认为这是必要的,因为否则产品将接收0作为起始值(因为它发生在总和中)并且乘法也将为0.事实上,如果我跑
p (1..5).inject(0) { |prod, n| prod * n }
Run Code Online (Sandbox Code Playgroud)
我有
0
Run Code Online (Sandbox Code Playgroud)
但后来我跑了
p (1..5).inject { |sum, n| sum + n }
p (1..5).inject { |prod, n| prod * n }
Run Code Online (Sandbox Code Playgroud)
得到了
15
120
Run Code Online (Sandbox Code Playgroud)
我的问题是:
a)为什么文档将此1作为初始值包含在实际上不需要时?
和
b)初始化被注入对象时的行为是什么#inject?
| 归档时间: |
|
| 查看次数: |
88 次 |
| 最近记录: |