亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

速記返回。

速記返回。

Go
臨摹微笑 2022-03-07 19:37:25
以下代碼在 Go 1.6 或 1.7 中生成語法錯誤(在語句末尾出現意外 ++ ):package mainimport "fmt"var x intfunc increment() int {        return x++   // not allowed}func main() {  fmt.Println( increment() )}這不應該被允許嗎?
查看完整描述

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 中也不起作用,因為賦值也是一個語句,因此會出現編譯時錯誤:


語法錯誤:語句末尾出現意外 +=


查看完整回答
反對 回復 2022-03-07
?
Qyouu

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


查看完整回答
反對 回復 2022-03-07
  • 2 回答
  • 0 關注
  • 222 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號