在Go语言中,如果您定义一个新类型,例如:
好的。但是为什么同样的规则不适用于函数呢?例如:
type MyInt int
您不能将MyInt
传递给期望int的函数,反之亦然:
func test(i MyInt) {
//do something with i
}
func main() {
anInt := 0
test(anInt) //doesn't work, int is not of type MyInt
}
好的。但是为什么同样的规则不适用于函数呢?例如:
type MyFunc func(i int)
func (m MyFunc) Run(i int) {
m(i)
}
func run(f MyFunc, i int) {
f.Run(i)
}
func main() {
var newfunc func(int) //explicit declaration
newfunc = func(i int) {
fmt.Println(i)
}
run(newfunc, 10) //works just fine, even though types seem to differ
}
现在,我并不是在抱怨,因为这样可以避免我必须在第一个例子中将newfunc
显式转换为MyFunc
类型;只是它看起来不一致。我相信这样做有很好的理由;有人能启发我吗?
我问的原因主要是因为我想以这种方式缩短一些非常长的函数类型,但我想确保这样做是预期且可接受的:)
type
比Scala更有用。不幸的是,Scala只有类型别名。 - Rick-777