凹语言支持for range迭代器
- 时间:2025-03-24
- 撰稿:凹语言 开发组
- 转载请注明原文链接:https://wa-lang.org/smalltalk/st0074.html
在新发布的 v0.22.0 版本中实验性地引入了for range迭代器支持。比如内置了对整数值迭代的支持:
wa
func main {
for i := range 3 {
println(i)
}
}
本质上这和运算符重载是类似的特性,这里是range
运算符内置对整数进行的重载。更有趣的是range
运算符还针对可被调用对象进行了重载,这样就可以实现自定义迭代器的能力:
wa
type MyObject :struct {
elems: []string
}
func New(a: ...string) => *MyObject {
return &MyObject{elems: a}
}
func MyObject.Iter => func => (ok: bool, k: int, v: string) {
idx: int
return func => (ok: bool, k: int, v: string) {
if ok = idx < len(this.elems); ok {
k, v = idx, this.elems[idx]
idx++
}
return
}
}
func main {
for i, v := range New("aa", "bb", "cc").Iter() {
println(i, v)
}
}
其中MyObject类型的Iter方法返回的是一个闭包函数对象:该闭包函数返回ok、key和value三个值,其中ok决定何时迭代终止,后续的2个返回值可以根据需要省略一个。
运行的结果如下:
$ wa run a.out.wa
0 aa
1 bb
2 cc
目前这是一个实验性的特性,未来开发组将根据真实开发场景做调整和完善,也欢迎社区同学参与讨论。