各编程语言里对 Iterator 进行修改时的对比
复制代码
go for range 类似语法糖,编译时候会转化为正常的 for 条件循环,类似下面的代码:
复制代码
复制代码
Python list for 会调用 iter(data) 转化为一个 Iterator, 然后调用 list c 实现的 listiter_next 方法,里面只判断了当前 index < PyList_GET_SIZE(seq) 就可以了。所以会一直循环下去。
复制代码
ArrayList 父类 AbstractList 里的内部类 Itr 的 next 方法会检查 它的 modCount 是否修改,修改了就产生异常。
复制代码
Rust 这个可以理解为一个 RWLock, for in 这里是读,下边 push 是写。在 safe Rust 下 编译期就会报错。
版权声明: 本文为 InfoQ 作者【BlockQuant】的原创文章。
原文链接:【http://xie.infoq.cn/article/ca33219357e6220c06e96f771】。未经作者许可,禁止转载。
评论