2015-12-03 39 views
-2

剛剛得到關於該碼的基本圍棋問題:轉到功能去神祕化

type Ips []string 
func (a Ips) Swap(i, j int) { a[i], a[j] = a[j], a[i] } 

我相信(a Ips)是交換函數的參數,但它爲什麼可能不是在括號內?

+0

這不是一個參數。它的意思是用這種類型的變量來調用。 – squiguy

+0

請您詳細說明可以在函數中使用但不作爲參數傳入的任何變量嗎? – Hua2308

+0

@SalvadorDali我不同意這是重複的。其中一個問題是「Go中是否有方法」。另一個問題是「接收者是否有返回值。」答案並不相同,除非你已經知道答案,否則你不能從答案中得出答案。這些顯然不是*重複的問題(雖然重複的問題可能在那裏) –

回答

1

a Ips是該方法的接收器。其參數是i intj int。這是綁定到Ips類型的方法,即數組中的兩個字符串並不返回任何內容。

試試吧on the playground

+0

接收方是指返回值還是別的東西? – Hua2308

+0

@ Hua2308否,返回值表示返回值,這個方法什麼也沒有返回,這是一個新的詞彙表ary給你 - 接收器是將實施該方法的類型。 –

0

(a Ips)被稱爲 '接收器'。這是調用方法的類型。在封面之下,它實際上像任何其他參數一樣傳入方法中(回想一下他們在堆棧中將參數推入的那個類)。在這種情況下,它是一個值類型,與其他值類型用作參數一樣,創建參數的副本,然後這就是堆棧中的內容。這也意味着當方法返回並且棧被彈出時它將超出範圍。

主要區別在於您需要一個接收類型的實例才能調用該方法。如果方法沒有接收類型,那麼它是打包的作用域,可以在包內的任何地方調用,或者如果導出,可以從導入的包別名中調用。