2017-05-26 70 views
1

在Kotlin函数的最后一个语句可以解释为它的返回值。对于用作表达式的Kotlin函数,是否有简洁的方式来操作并返回值?

下面的例子可以简化为不太冗长吗?

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

一个具体案例,我想这样做是低于使用RxJava一个例子 - 即使有更好的接收方法我也有兴趣在纯科特林解决方案,如果它的存在。

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

回答

5

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

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

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

{ text: String -> 
    validateText(text).also { 
     if (it) actOnValidation() 
    } 
} 
相关问题