假設你聲明了一個函數類型type mapFunc func(value int) int你可以使用這種類型來聲明一個函數而不復制它嗎?就像是:doubleIt := mapFunc { return 2*value}
2 回答

隔江千里
TA貢獻1906條經驗 獲得超10個贊
據我所知,最短的方法仍然是:
doubleIt := func (value int) int {
return value * 2
}
所以它并沒有變得更短,而且我認為將函數簽名與其主體分離不會更具可讀性。聲明命名的 func 類型的好處是在其他聲明中使用它。
doubleId := mapFunc(func...)由于類型標識規則,不需要額外的轉換:
如果兩個函數類型相同,則它們具有相同數量的參數和結果值,對應的參數和結果類型相同,并且兩個函數都是可變參數或兩者都不是。參數和結果名稱不需要匹配。

牧羊人nacy
TA貢獻1862條經驗 獲得超7個贊
當然,您可以像任何其他預先聲明的類型一樣func是一流的類型,盡管以這種方式聲明它沒有多大意義:
package main
import "fmt"
// You need not a named argument for a named type
type mapFunc func(int) int
func main() {
doubleIt := mapFunc(func(value int) int { return value * 2})
fmt.Println(doubleIt(2)) // 4
}
這是為了說明函數只是 Go 中的另一種類型,可以像任何其他命名類型一樣對待。
- 2 回答
- 0 關注
- 257 瀏覽
添加回答
舉報
0/150
提交
取消