Kotlin 回调立即从 if 语句回调

  • 本文关键字:回调 if 语句 Kotlin kotlin
  • 更新时间 :
  • 英文 :


这闻起来很有趣,因为两次调用startSync((:

override fun onDataChange(dataSnapshot: DataSnapshot) {
if (null == dataSnapshot.value) {
aThing.putAll(defaultConfig)
dbRef.setValue(botState) { _, _ -> startSync() }
} else {
startSync()
}
}

有没有一种 Kotlin 友好的方式来表达"如果 X 然后使用回调 Z(( 执行 Y,否则不使用立即回调 Z(("?但不必有 Z(( 两次。

我来自JavaScript,Promise.resolve().then...符合要求。

不想和@yole争论,毕竟他是 Kotlin 成语的作者。

但是如果你真的喜欢像JavaScript这样的东西,你可以做这样的事情:

dataSnapshot.value.let {
if (it == null) {
::startSync
}
else {
startSync()
null
}
}?.let {
aThing.putAll(defaultConfig)
dbRef.setValue(botState) { _, _ ->  it() }
}

但正如你所看到的,它并不比你的版本短,实际上更令人困惑。

有时,命令式方式是正确的方式,我认为。

另一种方法是使用with和方法引用:

with(::startSync) {
if (dataSnapshot.value == null) {
aThing.putAll(defaultConfig)
dbRef.setValue(botState) { _, _ ->  this() }
}
else {
this()   
}
}

最新更新