【发布时间】:2019-02-19 22:15:22
【问题描述】:
这段代码有区别吗:
fun isDogEating(): Boolean {
return dog?.let { return it.eating } ?: false
}
还有这个
fun isDogEating(): Boolean {
return dog?.eating ?: false
}
我碰到了第一个类似的东西,想知道let在这里是否多余。
【问题讨论】:
这段代码有区别吗:
fun isDogEating(): Boolean {
return dog?.let { return it.eating } ?: false
}
还有这个
fun isDogEating(): Boolean {
return dog?.eating ?: false
}
我碰到了第一个类似的东西,想知道let在这里是否多余。
【问题讨论】:
行为没有差异。
如果dog == null,两个函数都返回false,因为末尾有?: false。
let 函数仅在dog != null 时执行。
与第二个示例中的eating 属性相同
注意let lambda 中的return 语句意味着从isDogEating 函数返回,而不是从lambda!要从 lambda 中返回,可以使用 return@let 或仅使用表达式
我更喜欢较短的版本:
fun isDogEating() = dog?.eating ?: false
【讨论】:
isDogEating 返回最终不会影响结果,但主要是意外。