看完 M 的 ruby 编程语言的迭代器部分,老实说,的确每一行代码都看明白了。但是总是说不出个所以然,感觉还
是理解不深刻,是否还有网络上的资源可以供小生追读一下,中文英文都 ok(繁体中文头大),请留下您的链接,
thanks。
比较理解难的有这么一段代码
def bundle(*enumerables)
enumerators = enumerables.map { |e| e.to_enum } //第2行
loop { yield enumerators.map { |e| e.next} }//第3行
end
a,b,c = [1,2,3], 4..6, 'a'..'e'
bundle(a,b,c) { |x| print x}
调试中我发现第 2 行的 enumerators 是 [#, #, #], 所以第 3 行的执行过程应该是: 第一次循环 loop,取出 c 的每一个 Enumerator 元素的 next(我就表示成 Enumerator[0]),赋给 block,也就是打印出 1,4,'a'。(隐式的操作 map(next)=&block 的结果) 第二次循环 loop,取出 enumerators 的每一个 Enumerator 元素的 next(我就表示成 Enumerator[1]), 赋给 block,也就是 打印出 2,5,'b'。(隐式的操作 map(next)=&block 的结果) 第三次循环 loop,取出 enumerators 的每一个 Enumerator 元素的 next(我就表示成 Enumerator[2]), 赋给 block,也就是 打印出 3,6,'c'。 第四次循环 loop,发现第一个 enumerators[0].next 已经没有元素了,所以跳出 loop,也就忽视 enumerators[2]。(隐式的操作 map(next)=&block 的结果)
纯属个人 yy 的过程,请指正。 另外有好的关于迭代器方面的文章,感谢分享。。