假设您声明了一个函数类型
type mapFunc func(value int) int
你可以使用这种类型声明一个函数而不重复它吗?类似的东西:
doubleIt := mapFunc {
return 2*value
}
答案 0 :(得分:4)
据我所知,最短路仍然是:
doubleIt := func (value int) int {
return value * 2
}
所以它没有变得更短,我不认为将功能签名与其身体分离会更具可读性。声明命名的func类型的好处是在其他声明中使用它。
由于type identity规则:
,因此不需要doubleId := mapFunc(func...)
之类的额外转化
如果两个函数类型具有相同数量的参数和结果值,相应的参数和结果类型相同,并且两个函数都是可变参数或两者都不是,则它们是相同的。参数和结果名称不需要匹配。
答案 1 :(得分:1)
当然,func
类似first-class类似于任何其他预先声明的类型,但以这种方式声明它并不合理:
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中的另一种类型,可以像任何其他命名类型一样对待。