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

在go的while等效时间内分配并比较?

在go的while等效时间内分配并比较?

Go
慕虎7371278 2021-05-03 18:27:33
在Go中,您可以执行以下操作:if foo := bar() ; foo != nil {    ...}在C / C ++中,您可以执行以下操作:while ((foo = bar()) != NULL) {    ...}但是,Go的语法似乎没有提供在while循环中进行分配和比较的任何等效方法。Go已替换while为的特定调用for(例如for a等价于for ; a ;)。仅仅尝试使用if版本语法会混淆解析器,因为它期望有第三条语句。我可以说:for foo := bar() ; foo != nil ; foo = bar() {    ....}但是在这种情况下,bar()调用是相当长,复杂的,并且不容易分解成自己的函数(尽管我可以做一些声明func要调用的局部调用的操作,但这仍然会降低代码的清晰度)。现在我正在做:for {    foo := bar();    if foo == nil { break; }    ...}但这似乎是不干净的,这既是因为它将循环条件与循环语句本身分开,又是因为它依赖于break。那么,在Go的while循环中是否有一种干净,惯用的方式来进行分配和比较?这是一个如此常见的用例,我无法想象没有办法做到。
查看完整描述

2 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

不。Go没有while语句,只有for语句的特殊形式-赋值是一个语句,而不是表达式。您的示例是恕我直言惯用的Go。


查看完整回答
反对 回复 2021-05-17
?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

您可以创建类似于bufio#Scanner.Scan的迭代器:


package main


type Bar struct {

   Foo int

}


func (o *Bar) Next() bool {

   o.Foo++

   return o.Foo < 10

}


func main() {

   var o Bar

   for o.Next() {

      println(o.Foo)

   }

}

然后Next,您可以在函数中放入所需的所有复杂逻辑。


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

添加回答

举报

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