The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
dyllen

go 新特性 range over func 没怎么看懂。。。。写库的时候用吗?

  •  
  •   dyllen · Aug 19, 2024 · 14372 views
    This topic created in 649 days ago, the information mentioned may be changed or developed.

    go1.23 新的正式特性 range over func 看了下没怎么看懂。。。

    for range 返回一个函数,函数里面还是 for range 或者就 for 循环:

    func Backward[E any](s []E) func(func(int, E) bool) {
        return func(yield func(int, E) bool) {
            for i := len(s) - 1; i >= 0; i-- {
                if !yield(i, s[i]) {
                    return
                }
            }
            return
        }
    }
    
    func main() {
        sl := []string{"hello", "world", "golang"}
        for i, s := range Backward(sl) {
            fmt.Printf("%d : %s\n", i, s)
        }
    }
    

    Backward这个函数这形式看起来还真有点复杂,不好理解。。。。可能例子不是相应场景下需要的,看半天没理解。 感觉一般都用不上。

    Supplement 1  ·  Aug 20, 2024
    示例是从一个博客文章里面复制的
    Supplement 2  ·  Aug 21, 2024
    一时没看出来 yield 就是函数类型参数变量的名称,一眼看以为是啥关键字..... 测试了下,每次执行到 yield(x,x)的时候就会返回值给 range 输出,接着继续执行 yield(x,x)后面的代码行。
    105 replies    2024-10-28 10:59:37 +08:00
    1  2  
    june4
        101
    june4  
       Aug 20, 2024
    @xz410236056 其它语言也都有生成器,比如 js 也有生成器协议,但人家同时还有 yield 语法糖可以掩盖底下丑陋的协议,用起来象 return 一样简单可读,没人会直接用原始协议的格式来写生成器,太丑了。
    dyllen
        102
    dyllen  
    OP
       Aug 20, 2024
    @voidmnwzp 不是官方示例,我在别人博客复制的。
    allenby
        103
    allenby  
       Aug 20, 2024 via Android
    看着像是在循环的时候返回本身和索引
    lveye
        104
    lveye  
       Aug 20, 2024
    官方的例子是这个 https://go.dev/wiki/RangefuncExperiment ,一样的东西。看着还挺不错,满足这 2 个一级函数就可以进行 for range 。

    type Seq[V any] func(yield func(V) bool)

    type Seq2[K, V any] func(yield func(K, V) bool)
    MrSeven7
        105
    MrSeven7  
       Oct 28, 2024
    func GetIterator[E any](s []E) func() E{
    i:=0
    return func() E{

    return s[i]
    }
    }
    1  2  
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2594 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 11:02 · PVG 19:02 · LAX 04:02 · JFK 07:02
    ♥ Do have faith in what you're doing.