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

语法错误:函数体外的非声明语句

语法错误:函数体外的非声明语句

Go
收到一只叮咚 2021-08-23 15:48:02
该函数makeEvenGenerator应该返回一个以顺序方式生成偶数的函数:package main import "fmt"func makeEvenGenerator() func() uint {    i := uint(0)    return func() (ret uint) {        ret = i        i += 2        return    }}func main() {    nextEven := makeEvenGenerator()    fmt.Println(nextEven()) // 0    fmt.Println(nextEven()) // 2    fmt.Println(nextEven()) // 4}  当我运行它时,我收到错误syntax error: unexpected func, expecting semicolon or newline和Non-declaration statement outside function body.该代码是从Caleb Doxsey 的An Introduction to Programming in Go 中逐字提取的。我不确定问题是什么。
查看完整描述

3 回答

?
大话西游666

TA贡献1817条经验 获得超14个赞

您在末尾的“}”makeEvenGeneratormain.

我修复了错误并将代码发布到了操场上


查看完整回答
反对 回复 2021-08-23
?
忽然笑

TA贡献1806条经验 获得超5个赞

你失踪之间的新线}在年底makeEvenGenerator和func main。


该模式的另一种替代方法是使用不返回函数的通道:


func evenGenerator() <-chan uint {

    ch := make(chan uint)

    go func() {

        i := uint(0)

        for {

            ch <- i

            i += 2

        }

    }()

    return ch

}


func main() {

    evens := evenGenerator()

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

        fmt.Println(<-evens)

    }

}


查看完整回答
反对 回复 2021-08-23
  • 3 回答
  • 0 关注
  • 339 浏览
慕课专栏
更多

添加回答

举报

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