对于用作表达式的 Kotlin 函数,是否有简洁的方法来操作 return 一个值?

For a Kotlin function used as an expression, is there concise way to operate on and return a value?

在 Kotlin 中,函数的最终语句可以解释为其 return 值。

是否可以将类似以下示例的情况简化为不那么冗长?

{ 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
      }
}

您可以使用 also() 操作和 return 接收器:

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

你也可以这样写,但我更喜欢第一种形式,因为我觉得这样更清楚:

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