对于用作表达式的 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()
}
}
在 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()
}
}