在Kotlin中,函数的最终语句可以解释为其返回值。
是否可以将以下示例的情况简化为更简洁?
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission
android:name="android.permission.MODIFY_PHONE_STATE"
tools:ignore="ProtectedPermissions" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<application
.
.
.
<receiver android:name=".BootBroadcastReceiver"
android:enabled="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
<receiver android:name=".Tasks"
android:enabled="true">
</receiver>
</application>
我希望这样做的具体案例如下,在使用RxJava的示例中 - 即使有更好的Rx方法,我也对纯Kotlin解决方案感兴趣(如果存在)。
{ text: String ->
val validated = validateText(text)
if (validated) {
actOnValidation()
}
validated
}
答案 0 :(得分:5)
您可以使用also()
来操作并返回接收器:
{ text: String ->
validateText(text).also { valid ->
if (valid) actOnValidation()
}
}
你也可以这样写,但我更喜欢第一种形式,因为我觉得它更清楚:
{ text: String ->
validateText(text).also {
if (it) actOnValidation()
}
}