为了账号安全,请及时绑定邮箱和手机立即绑定

是否可以使用 for 循环迭代 golang 中返回的函数?

是否可以使用 for 循环迭代 golang 中返回的函数?

Go
幕布斯7119047 2021-12-20 09:53:45
假设我们有这个:func foo() func() int {    return func() {        for i := range [0..10] {            return i        }    }}func main() {    for i := foo() {    }}我可以在不知道循环多少次的情况下在 for 循环中迭代返回的函数吗?
查看完整描述

2 回答

?
慕妹3242003

TA贡献1824条经验 获得超6个赞

例如,


package main


import "fmt"


func foo(n int) func() (int, bool) {

    i := -1

    return func() (int, bool) {

        if i >= n {

            return 0, true

        }

        i++

        return i, false

    }

}


func main() {

    f := foo(5)

    for i, eof := f(); !eof; i, eof = f() {

        fmt.Println(i)

    }

}

输出:


0

1

2

3

4

5


查看完整回答
反对 回复 2021-12-20
?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

你不能单独迭代一个函数。一个函数只返回一次,所以你的 for 循环永远不会循环。如果你想返回一个闭包i,你可以在每次调用时增加它,但你仍然需要一种方法来知道什么时候停止,你可以通过从内部函数返回多个值来实现。


Go 还使用沟通渠道,您可以range通过这些渠道进行沟通。


func foo() chan string {

    ch := make(chan string)

    go func() {

        for i := 0; i < 10; i++ {

            ch <- strconv.Itoa(i)

        }

        close(ch)

    }()

    return ch

}


func main() {

    for i := range foo() {

        fmt.Println(i)

    }

}

http://play.golang.org/p/oiFTAgyeJd


查看完整回答
反对 回复 2021-12-20
  • 2 回答
  • 0 关注
  • 151 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信