在Go中你可以做到:
if foo := bar() ; foo != nil {
...
}
Run Code Online (Sandbox Code Playgroud)
在C/C++中,您可以:
while ((foo = bar()) != NULL) {
...
}
Run Code Online (Sandbox Code Playgroud)
但是,Go的语法似乎没有提供在while循环中进行赋值和比较的任何等效方法; Go已替换while为特定的调用for(例如for a,相当于for ; a ;).简单地尝试使用if版本语法会使解析器混淆,因为它期望有第三个语句.
我可以说:
for foo := bar() ; foo != nil ; foo = bar() {
....
}
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,bar()调用相当长,复杂,并且不容易分解为自己的函数(虽然我可以做一些事情,比如声明一个本地func调用,但这仍然会降低代码的清晰度).
现在我在做:
for {
foo := bar();
if foo == nil { break; }
...
}
Run Code Online (Sandbox Code Playgroud)
但这似乎是不洁净的,因为它将循环标准与循环语句本身分开,并且因为它依赖于它break.
那么,在Go中的while循环中是否有一种干净,惯用的方式进行分配和比较?这是一个常见的用例,我无法想象没有办法做到这一点.
| 归档时间: |
|
| 查看次数: |
2027 次 |
| 最近记录: |