如何用 Kotlin 编写:
flags |= newFlag
我唯一发现的是:
flags = flags or newFlag
有内置的
bitwise or
运算符进行赋值吗?
Kotlin 中还没有内置的按位或赋值 运算符。
正如您自己写的那样,这可以完成工作:
var flag = false
for (i in 1..5) {
flag = flag or someCondition(i, flag)
}
fun someCondition(i: Int, flag: Boolean): Boolean {
println("i: $i, flag: $flag")
return true
}
输出:
i: 1, flag: false
i: 2, flag: true
i: 3, flag: true
i: 4, flag: true
i: 5, flag: true
这是因为
or
执行逻辑或运算(两个表达式都被求值)。
如果只是为了确保 true 布尔值保持 true,那么这段代码也可以完成这项工作。如果您来自 Java,这种风格可能更容易理解:
var flag = false
for (i in 1..5) {
flag = someCondition(i, flag) || flag
}
i: 1, flag: false
i: 2, flag: true
i: 3, flag: true
i: 4, flag: true
i: 5, flag: true
但是请注意,当链接更多条件时,由于短路评估 (
||
),它会导致不必要的行为:
var flag = false
for (i in 1..5) {
flag = someCondition(i, flag) || someOtherCondition() || flag
}
fun someCondition(i: Int, flag: Boolean): Boolean {
println("i: $i, flag: $flag")
return true
}
fun someOtherCondition(): Boolean {
println("Nobody calls me :(")
return true
}
导致:
i: 1, flag: false
i: 2, flag: true
i: 3, flag: true
i: 4, flag: true
i: 5, flag: true
所以尽快适应
or
是个好主意。