此代碼段按預(yù)期工作play.golang.org/p/VuCl-OKMavi := 10next := 11prev, i := i, next然而,這個幾乎相同的片段給出了non-name f.Bar on left side of := play.golang.org/p/J8NNWPugQGtype Foo struct { Bar int}f := Foo{10}next := 11prev, f.Bar := f.Bar, next停止類型推斷的結(jié)構(gòu)有什么特別之處?這是一個錯誤嗎?
3 回答

波斯汪
TA貢獻1811條經(jīng)驗 獲得超4個贊
這不是真正的類型推斷問題,只是左側(cè):=
必須是標識符列表,而f.Bar
不是標識符,因此不能聲明——即使:=
是稍微寬松的規(guī)則也不行它可以聲明什么。請參閱Go 編程語言規(guī)范中的“短變量聲明”。

森欄
TA貢獻1810條經(jīng)驗 獲得超5個贊
從規(guī)范的短變量聲明部分:
與常規(guī)變量聲明不同,短變量聲明可以重新聲明變量,前提是它們最初在同一塊中較早地聲明......具有相同的類型,并且至少有一個非空變量是新的。
因此,如果您在另一種類型(示例中的 struct Foo)中聲明變量,則“假設(shè)它們最初是在同一塊中較早地聲明的”將取消其資格。
所以答案是只將預(yù)先聲明的變量設(shè)置為等于不使用 := 語法的值:
...
var prev int
prev, f.Bar = f.Bar, next
...
- 3 回答
- 0 關(guān)注
- 388 瀏覽
添加回答
舉報
0/150
提交
取消