我有两个变量,想要同时为两个变量分配相同的值,如下所示:
var allGood: Boolean = false
val deviceId: String = "3550200583"
var isValidId: Boolean = false
allGood = isValidId = deviceId.length > 0 && deviceId.length <= 16
有什么办法可以做到这一点?
答案 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);