共计 566 个字符,预计需要花费 2 分钟才能阅读完成。
看了一下之前的提案,之前没有泛型,然后一系列 go 的迭代器实现五花八门:
runtime.CallersFrames
bufio.Scanner
database/sql.Rows
archive/tar.Reader.Next
bufio.Reader.ReadByte
bufio.Scanner.Scan
container/ring.Ring.Do
…
相似的函数签名参数作用也不一定相同
现在有了泛型就加上么,而且目前 iter 里的东西极少
type Seq[V any] func(yield func(V) bool)
type Seq2[K, V any] func(yield func(K, V) bool)
func Pull[V any](seq Seq[V]) (next func() (V, bool), stop func())
func Pull2[K, V any](seq Seq2[K, V]) (next func() (K, V, bool), stop func())
不想看细节和实现就当语法糖用也不麻烦, 对于 Seq[V any]
和 Seq[K, V any]
,使用上也就是 range 时前面变量数量的区别
for v := range seq {...}
// or
for k, v := raneg seq2 {...}
喜欢函数式的也不是不能凑合用:
slices.Values(func(v T) bool {...})
正文完