如何在Kotlin中将相同的值分配给多个变量

时间:2019-05-30 05:35:33

标签: kotlin

我有两个变量,想要同时为两个变量分配相同的值,如下所示:

var allGood: Boolean = false
val deviceId: String = "3550200583"
var isValidId: Boolean = false
allGood = isValidId = deviceId.length > 0 && deviceId.length <= 16

有什么办法可以做到这一点?

3 个答案:

答案 0 :(得分:4)

由于分配不是Kotlin中的表达式,因此您不能以这种方式进行多次分配。但是还有其他方法。最明显的就是:

isValidId = deviceId.length > 0 && deviceId.length <= 16
allGood = isValidId

更惯用(如果更长)的方法是:

(deviceId.length > 0 && deviceId.length <= 16).let {
    allGood = it
    isValidId = it
}

(顺便说一句,您可以将条件简化为deviceId.length in 1..16。)

Kotlin不允许这样做有两个原因。主要的is与使用命名参数fn(paramName = value)调用函数的语法不兼容。但这也避免了===之间的混淆(否则可能会导致难以发现的错误)。另请参见here

答案 1 :(得分:4)

那:

var allGood: Boolean = false
val deviceId: String = ...
val isValidId: Boolean = (deviceId.length in 1..16).also { allGood = it }

.also允许您使用接收到的值执行其他操作,然后返回原始值。

答案 2 :(得分:0)

另一种方法是这样:

val deviceId: String = "3550200583";
val condition = deviceId.length > 0 && deviceId.length <= 16
var (allGood, isValidId) = arrayOf(condition, condition);