17
在去,你可以這樣做:指定並比較go-while-equivalent?
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循環中進行賦值和比較的方式?這是一個很常見的用例,我無法想象沒有辦法做到這一點。
這就是我所害怕的。 – fluffy