对于用作表达式的Kotlin函数,是否有简洁的方法来操作并返回值?

Con*_* K. 1 android kotlin rx-java rx-kotlin rx-java2

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

可以将以下示例的情况简化为更简洁吗?

{ text: String ->
  val validated = validateText(text)
  if (validated) {
    actOnValidation()
  }
  validated
}
Run Code Online (Sandbox Code Playgroud)

我想要这样做的一个具体案例是在使用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
      }
}
Run Code Online (Sandbox Code Playgroud)

JK *_* Ly 5

您可以使用它also()来操作并返回接收器:

{ text: String ->
    validateText(text).also { valid ->
        if (valid) actOnValidation()
    }
}
Run Code Online (Sandbox Code Playgroud)

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

{ text: String ->
    validateText(text).also {
        if (it) actOnValidation()
    }
}
Run Code Online (Sandbox Code Playgroud)