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

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

  •  
  •   dyllen · Aug 19, 2024 · 15642 views
    This topic created in 806 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
    june4
    Aug 20, 2024
    101
    @xz410236056 其它语言也都有生成器,比如 js 也有生成器协议,但人家同时还有 yield 语法糖可以掩盖底下丑陋的协议,用起来象 return 一样简单可读,没人会直接用原始协议的格式来写生成器,太丑了。
    dyllen
    dyllen
    OP
    Aug 20, 2024
    102
    @voidmnwzp 不是官方示例,我在别人博客复制的。
    allenby
    allenby
    Aug 20, 2024 via Android
    103
    看着像是在循环的时候返回本身和索引
    lveye
    lveye
    Aug 20, 2024
    104
    官方的例子是这个 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
    MrSeven7
    Oct 28, 2024
    105
    func GetIterator[E any](s []E) func() E{
    i:=0
    return func() E{

    return s[i]
    }
    }
    1  2  
    ❮ ❯
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1614 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 23:32 · PVG 07:32 · LAX 15:32 · JFK 18:32
    ♥ Do have faith in what you're doing.