我有两个变量,并希望同时为这两个变量分配相同的值,如下所示:
var allGood: Boolean = false
val deviceId: String = "3550200583"
var isValidId: Boolean = false
allGood = isValidId = deviceId.length > 0 && deviceId.length <= 16
Run Code Online (Sandbox Code Playgroud)
有没有办法实现这一目标?
因为赋值不是 Kotlin 中的表达式,所以不能以这种方式进行多个赋值。但还有其他方法。最明显的就是:
isValidId = deviceId.length > 0 && deviceId.length <= 16
allGood = isValidId
Run Code Online (Sandbox Code Playgroud)
更惯用(如果更长)的方式是:
(deviceId.length > 0 && deviceId.length <= 16).let {
allGood = it
isValidId = it
}
Run Code Online (Sandbox Code Playgroud)
(顺便说一下,您可以将条件简化为deviceId.length in 1..16。)
Kotlin 不允许这样做有几个原因。其中主要的一个是,它是与语法调用名为参数的函数不兼容:fn(paramName = value)。但它也避免了=和之间的任何混淆==(否则可能会导致难以发现的错误)。另请参见此处。
关于什么:
var allGood: Boolean = false
val deviceId: String = ...
val isValidId: Boolean = (deviceId.length in 1..16).also { allGood = it }
Run Code Online (Sandbox Code Playgroud)
.also 允许您使用它接收的值执行其他操作,然后返回原始值。
| 归档时间: |
|
| 查看次数: |
3320 次 |
| 最近记录: |