作者putumaxally (putumaxally)
看板Ruby
标题Re: [问题] 两个计算上的小问题
时间Sat May 31 23:22:58 2014
※ 引述《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
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 175.180.68.25
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/Ruby/M.1401549784.A.F90.html
※ 编辑: putumaxally (175.180.68.25), 05/31/2014 23:24:56
1F:推 timeregorge:谢谢您的解说,不过您的例子前面是否是[0,2]呢? 06/03 00:16
[2, 4] 就是你的 a[0, 2]
※ 编辑: putumaxally (175.180.68.25), 06/03/2014 01:46:09