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