啥是推断机制
val a = 3 就可以推断a 为Int类型
- 函数声明的时候是否要用到推断机制
要谨慎使用
fun main() {
println(sum(3,2))//明显输出的是5
}
fun sum(x:Int,y:Int) = x+ y
但是函数如果是有递归的话
fun main() {
println(sum(3))
}
fun sum(n:Int) = {
if (n == 0) 1 else n*sum(n-1)
}
error :Type checking has run into a recursive problem. Easiest workaround: specify types of your declarations explicitly
以上报错
- 因为kotlin无法判断在这个if表达式 返回的是 1 还是函数 ,它只能推断出if各个逻分支的相同类型或者公共父类型
总结
-
函数参数是时候必须声明类型
-
非表达式定义的函数 除了返回Unit 其他时候需要声明
-
表达式函数体 eg
fun sum(x:Intm,y:Int) = x+ y
-
代码块函数体 ——正常函数有{}的
-
-
递归函数必须声明
-
if是一个共有方法的返回值的函数 ——建议声明
参考《Kotlin核心编程》 ————水滴技术团队著