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

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

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

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

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

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