doupu3211 2014-04-26 13:05 采纳率: 100%
浏览 126
已采纳

在Go中使用重复的函数调用进行循环

I'm looping over state changes where the change & condition are defined in a function and was hoping to write a for statement where I only declare the function call once.

This code works, but repeating message, flag = a.foo() feels messy. Is there a more effective way to write a for loop when the initial statement is the same as the post statement?

func (a *Example) foo() (string, bool) {
    // Function affects state of a
    // returns message on each step and flag if condition reached
}

func main() {
    // Step through each state change until flag is triggered
    for message, flag := a.foo(); flag; message, flag = a.foo() {
        fmt.Printf("%s
", message)
    }
}

I was hoping that there would be some kind of equivalent to how nicely it fits in to an if statement like this:

if message, flag := a.foo(); !flag {
    fmt.Printf("%s
", message)
}

In fact, I was rather hoping I could just change that if to a for but, alas, expected ';'. found '{'

I may well be asking too much, but if there is an answer I'd love to hear it. Thanks

  • 写回答

3条回答 默认 最新

  • du532861657 2014-04-26 13:44
    关注

    As far as I know there is no way to do exactly what you want (though I'd love if it was possible too). You could use an "infinite" loop and write the break condition manually, although that also isn't too great, something like:

    func main() {
        for {
            msg, flag := a.foo()
            if flag {
                break
            }
            fmt.Printf(...)
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog