1 回答

TA貢獻1853條經驗 獲得超9個贊
Scala 大量借鑒了函數式編程。去沒有。
(如果你使用過多種其他編程語言,你絕對應該閱讀Go 規范。它不是很長,因為 Go 不是一種非常大的語言,盡管新的泛型肯定會使事情復雜化一些。)
在 Go 中,func
關鍵字引入函數定義或函數類型,具體細節取決于上下文。關鍵字var
引入變量聲明。1 所以:
func inc2(x int) int { return x + 1 }
定義了一個函數,inc2
,其代碼如圖所示。但:
var inc1 = // ...
聲明然后初始化一個變量,inc1
. 變量的類型和初始值由注釋掉的部分決定,所以:
var inc1 = func(x int) int { return x + 1 }
定義了一個函數(沒有名字),其代碼如下所示。然后將該函數分配給變量作為其初始值,因此變量的隱含類型是func (int) int
or function 接受一個 type 的參數int
并返回一個 type 的值int
。
創建變量后,您現在可以調用當前存儲在該變量中的函數:
func callit(arg int) {
result := inc1(arg)
// ... do something with the result ...
}
或者您可以為變量分配一個新值,例如:
func overwrite() {
inc1 = func(a int) int { return a * 2 } // name `inc1` is now misleading
}
因為inc2是一個函數,你不能重新給它賦新值:它只是一個函數,不是變量。
1請注意,帶有初始化的變量聲明可以使用“短聲明”形式:
func f() {
v := 3
// ...
}
我們省略了類型,只說“使用表達式的類型來確定聲明的類型”。這聲明并初始化變量。短聲明只能出現在塊范圍內,因此它們必須在某個函數內。除了省略關鍵字外,它們不會做任何你通過包含關鍵字或有時包含多個關鍵字var無法做到的事情:varvar
result, err := doit()
可能需要:
var result someType
var err error
result, err = doit()
在不使用簡短聲明形式編寫時。
- 1 回答
- 0 關注
- 188 瀏覽
添加回答
舉報