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

假设我们有这个:


func foo() func() int {

    return func() {

        for i := range [0..10] {

            return i

        }

    }

}


func main() {

    for i := foo() {


    }

}

我可以在不知道循环多少次的情况下在 for 循环中迭代返回的函数吗?


幕布斯7119047
浏览 152回答 2
2回答

慕妹3242003

例如,package mainimport "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)    }}输出:012345

拉风的咖菲猫

你不能单独迭代一个函数。一个函数只返回一次,所以你的 for 循环永远不会循环。如果你想返回一个闭包i,你可以在每次调用时增加它,但你仍然需要一种方法来知道什么时候停止,你可以通过从内部函数返回多个值来实现。Go 还使用沟通渠道,您可以range通过这些渠道进行沟通。func foo() chan string {&nbsp; &nbsp; ch := make(chan string)&nbsp; &nbsp; go func() {&nbsp; &nbsp; &nbsp; &nbsp; for i := 0; i < 10; i++ {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ch <- strconv.Itoa(i)&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; close(ch)&nbsp; &nbsp; }()&nbsp; &nbsp; return ch}func main() {&nbsp; &nbsp; for i := range foo() {&nbsp; &nbsp; &nbsp; &nbsp; fmt.Println(i)&nbsp; &nbsp; }}http://play.golang.org/p/oiFTAgyeJd
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go