2 回答

TA貢獻1831條經驗 獲得超4個贊
因為沒有隱式標識符來表示實際的接收者值(就像this在 Java 中一樣),如果你想引用接收者值 ( Rectanglevalue)的字段或方法,你需要一個可以使用的標識符。
請注意,規范不要求您命名接收器值,例如以下使用空白標識符的語法是有效的:
func (_ Rectangle) Foo() string {
return "foo"
}
甚至這樣:省略接收者名稱(參數名稱):
func (Rectangle) Foo() string {
return "foo"
}
規范中的相關部分:方法聲明:
MethodDecl = "func" Receiver MethodName ( Function | Signature ) .
Receiver = Parameters .
其中參數是:
Parameters = "(" [ ParameterList [ "," ] ] ")" .
ParameterList = ParameterDecl { "," ParameterDecl } .
ParameterDecl = [ IdentifierList ] [ "..." ] Type .
正如您在最后一行中看到的,IdentifierList是可選的(但Type必需的)。

TA貢獻1812條經驗 獲得超5個贊
結構方法類似于類方法。變量“r”是對該方法所應用到的結構/類實例/對象的引用。如果沒有該引用,您將無法訪問該結構/對象中包含的任何內容。
例如,我smallRectangle使用您的結構創建:
var smallRectangle = Rectangle{5,3}
現在我想使用 Rectangle 方法計算面積 Area
area := smallRectangle.Area()
讓我們看看函數內部發生了什么。r從方法聲明變成的副本,smallRectangle因為那是調用它的結構對象。
func (smallRectangle Rectangle) Area() int {
return smallRectangle.length * smallRectangle.width
}
正如 Icza 所指出的,沒有像selforthis這樣的隱式標識符,因此該方法訪問結構值的唯一方法是通過 identifier r。
- 2 回答
- 0 關注
- 149 瀏覽
添加回答
舉報