Re: [问题] 两个计算上的小问题

楼主: putumaxally (putumaxally)   2014-05-31 23:22:58
※ 引述《timeregorge (vincent)》之铭言:
: a = [2,4,6,8,10]
: a[0,2].inject(3) { |sum,element| sum + element }
: 为什么结果是9? 计算过程是怎么算的呢?
[2, 4].inject(3) { |sum, element| sum + element }
Enumerable 的 inject 会把上面的 block 跑阵列大小的次数,然后依序把元素
带入 block 的第二的参数(目前是 element),然后 block 最后的运算结果再丢
给 block 的第一个参数(上面定义为 sum),但是第一次执行的时候 sum 没有值
所以就是你给 inject 的引数,所以第一次执行 block 的 sum 就是你打的 3
执行过程就是:
第一次跑 block => sum = 3, element = 2 # 3 就是你给 inject 的引数
block 回传 sum + element # => 5
第二次跑 block => sum = 5, element = 4 # 5 就是上次 block 的回传值
block 回传 sum + element # => 9
只有两个元素,所以只跑两次回传最后一次的 block 的回传值 9
作者: timeregorge (Nick)   2014-06-03 00:16:00
谢谢您的解说,不过您的例子前面是否是[0,2]呢?

Links booklink

Contact Us: admin [ a t ] ucptt.com