在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循环中是否有一种干净,惯用的方式来进行分配和比较?这是一个如此常见的用例,我无法想象没有办法做到。
qq_笑_17
拉莫斯之舞
相关分类