1

在 Kotlin 中,函数的最终语句可以解释为它的返回值。

像以下示例这样的情况可以简化为不那么冗长吗?

{ text: String ->
  val validated = validateText(text)
  if (validated) {
    actOnValidation()
  }
  validated
}

下面是使用 RxJava 的示例中的一个具体案例——即使有更好的 Rx 方法,我也对纯 Kotlin 解决方案(如果存在)感兴趣。

fun inputChainObservable(targetField: TextView, chainedField: TextView): Observable<Boolean> {
  return targetField.textChanges()
      .observeOn(AndroidSchedulers.mainThread())
      .map { cs: CharSequence? ->
        val hasInput = validateText(cs.toString())
        if (hasInput) {
          chainedField.requestFocus()
        }
        hasInput
      }
}
4

1 回答 1

5

您可以使用also()对接收器进行操作和返回:

{ text: String ->
    validateText(text).also { valid ->
        if (valid) actOnValidation()
    }
}

你也可以这样写,但我更喜欢第一种形式,因为我认为它更清晰:

{ text: String ->
    validateText(text).also {
        if (it) actOnValidation()
    }
}
于 2017-05-27T01:12:32.917 回答