《Go 语言高级编程》4.2 math/rand/v2 与 iter.Pull 组合子
math/rand/v2 与 iter.Pull 常被记错版本归属。本节用 api 清单核实:前者 Go 1.22 引入、1.24 补 AppendBinary,后者是 Go 1.23 的 range-over-func 配套;再实测 PCG 与 ChaCha8 的可复现与 MarshalBinary 往返,给出 iter.Pull 比 range 慢约 132 倍的真实数字与使用判据。
tag
math/rand/v2 与 iter.Pull 常被记错版本归属。本节用 api 清单核实:前者 Go 1.22 引入、1.24 补 AppendBinary,后者是 Go 1.23 的 range-over-func 配套;再实测 PCG 与 ChaCha8 的可复现与 MarshalBinary 往返,给出 iter.Pull 比 range 慢约 132 倍的真实数字与使用判据。
很多人把可迭代对象和迭代器当成同一件事,这恰恰是理解 for 循环与生成器的第一道坎。本节先用一张表把两者的协议差异讲透:可迭代对象只需实现 __iter__,迭代器还要实现 __next__ 并在耗尽时抛出 StopIteration。接着展开 for 循环的等价写法、手写迭代器类、生成器函数与生成器表达式的区别、生成器的惰性与一次性,并实测生成器比列表省下多少内存。
深入讲解 Lua 中 table 作为数组的用法与泛型 for 迭代器机制:pairs 与 ipairs 的区别、自定义迭代器的实现原理,以及遍历时的常见陷阱。