主要观点:2024 年 4 月 2 日 Lorenz(xha)引入了 for-each 循环到 Hare 开发分支,包括编译器、标准库、规范和教程的补丁,介绍了设计 for-each 循环的背景及相关挑战。
关键信息:
- 之前迭代数组/切片需使用索引,现可使用 for-each 循环,如
foreach (x in [1, 2, 3]) { fmt::printfln("{}", x)!; };
。 - 标准库中已使用迭代器概念,如逐行读取文件,但之前实现较繁琐
for (true) match (bufio::read_line(file)!) {... };
,新的 for-each 迭代器循环更简洁for (let line => bufio::read_line(file)!) { fmt::printfln("{}", strings::fromutf8(line)!)!; };
。 - 讨论了 for-each 循环的语法,决定引入新的
for
语法,包括值循环for (let x.. [1, 2, 3]) { fmt::printfln("{}", x)!; };
和引用循环for (let x &.. [1, 2, 3]) { fmt::printfln("{}", *x)!; };
,以及迭代器循环的实现细节和挑战。
重要细节: - Hare 的RFC 流程用于讨论和达成对 Hare 较大更改的共识,for-each 循环的 RFC 经过三次修订达成解决方案。
- for-each 迭代器循环在每次循环开始时执行绑定初始化器
bufio::read_line(file)!
,其返回带done
类型的标记联合,io::EOF
为done
类型,循环根据返回值决定是否终止。 - 仍有很多 Hare 代码需更新以使用新的 for-each 循环,特别是扩展库尚未更新,计划在工作中处理。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。