2 回答

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

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