假设你声明了一个函数类型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 关注
- 245 浏览
添加回答
举报
0/150
提交
取消