类型推断
类型推断是指由编译器根据程序上下文自动推断变量或表达式的类型,而无需开发者显式写出。 仓颉作为现代编程语言,对类型推断也提供了良好的支持。
在仓颉中变量的定义可以根据初始化表达式的类型来推断其类型。除了变量以外,仓颉还额外支持了函数定义返回值类型的推断。在仓颉中,函数体的最后一个表达式会被视为这个函数的返回值。像变量一样,当函数定义省略了返回类型,函数就会通过返回值来推断返回类型。
var foo = 123 // foo 是 'Int64'
var bar = 'hello' // bar 是 'String'
func add(a: Int, b: Int) { // add 返回 Int
a + b
}
仓颉还支持在泛型函数调用中推断类型参数,包括对柯里化函数里泛型参数的推断,如下面的例子所示:
func map<T, R>(f: (T)->R): (Array<T>)->Array<R> {
...
}
map({ i => i.toString() })([1, 2, 3]) // 支持推断泛型柯里化函数
// 推断结果为map<Int, String>({ i => i.toString() })([1, 2, 3])
注意 lambda 表达式作为 map
的第一个参数,它的参数类型(T
)和返回值类型(R
)都可以被推断出来,尽管参数类型(T
)的推断还反过来依赖对 map
的第二个参数的类型(Array<T>
)的推断。