【发布时间】:2018-02-28 22:55:10
【问题描述】:
我在http://mings.in/2017/03/12/Kotlin-Null-Safety.html阅读了猫王接线员
Code A 和 Code C 都可以,但是 Code B 出错(“Type mismatch: inferred type is Int but Unit was expected”),为什么?
代码 A
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val b: String? = "hello"
val l = b?.length ?: -1
}
代码 B
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val b: String? = "hello"
val l = b?.length ?: return -1
}
代码 C
fun getLength(b: String?): Int {
val l = b?.length ?: return -1
return l
}
顺便说一句,BakaWaii 告诉我“代码 A 没问题,因为 -1 是一个表示值的表达式,因此可以将它分配给 l。但是在代码 B 中,return -1 是一个从函数返回的表达式。 "
我无法理解“在代码 B 中,return -1 是从函数返回的表达式”。我认为“返回-1”将返回-1,为什么应用程序会出现“类型不匹配:推断类型为Int但预期单位”?
还有更多:
代码C和代码B一样,不知道为什么还可以!!!
【问题讨论】:
-
当您尝试编译或运行它时会发生什么?这会给你答案。
标签: kotlin