2 回答

TA貢獻1757條經驗 獲得超8個贊
這是一個錯誤,因為 Go 中的++
and--
是語句,而不是表達式:Spec: IncDec 語句(并且語句沒有將返回的結果)。
如果沒有指針算術,前置和后置增量運算符的便利值就會下降。通過將它們從表達式層次結構中完全刪除,表達式語法得到了簡化,并且圍繞 ++ 和 --(考慮 f(i++) 和 p[i] = q[++i])的求值順序的混亂問題也被消除了. 簡化意義重大。至于后綴與前綴,兩者都可以正常工作,但后綴版本更傳統;對前綴的堅持源于 STL,這是一個語言庫,其名稱諷刺地包含后綴增量。
所以你寫的代碼只能寫成:
func increment() int {
x++
return x
}
你必須在不傳遞任何東西的情況下調用它:
fmt.Println(increment())
請注意,我們仍然會嘗試使用賦值將其寫在一行中,例如:
func increment() int {
return x += 1 // Compile-time error!
}
但這在 Go 中也不起作用,因為賦值也是一個語句,因此會出現編譯時錯誤:
語法錯誤:語句末尾出現意外 +=

TA貢獻1786條經驗 獲得超11個贊
公認的解決方案是正確的,因為 OP 的代碼不起作用,因為在 go increment/decrement(x++/x--) 語句中是不返回值的表達式。
但是,提出的解決方案與原始請求的效果略有不同。
x++ 將返回 x 的值,然后以類似 C 的語法遞增。
但是,如果您這樣做,則會發生相反的情況:
x++
return x
您可以通過將初始值減一或使用此處編寫的 defer 語句來否定該問題:
func incr() int {
defer func() { counter++ }()
return counter
}
https://play.golang.org/p/rOuAv7KFJQw
- 2 回答
- 0 關注
- 222 瀏覽
添加回答
舉報