【发布时间】:2019-04-24 07:38:36
【问题描述】:
今天我很惊讶地发现,这种显然是惯用的代码的做法失败了:
class QuickTest {
var nullableThing: Int? = 55
var nullThing: Int? = null
@Test
fun `test let behaviour`() {
nullableThing?.let {
print("Nullable thing was non-null")
nullThing?.apply { print("Never happens") }
} ?: run {
fail("This shouldn't have run")
}
}
}
这是因为,结合隐式返回,nullThing?.apply{...} 将 null 传递给 let,因此 elvis 运算符对 null 求值并运行第二个块。
这很难检测到。除了传统的if/else 之外,我们是否有合适的替代方案而没有这个陷阱?
【问题讨论】: