Kotlin 中按位或赋值“|=”的等价物是什么?

问题描述 投票:0回答:2

如何用 Kotlin 编写:

flags |= newFlag

我唯一发现的是:

flags = flags or newFlag

有内置的

bitwise or
运算符进行赋值吗?

bitwise-operators kotlin
2个回答
29
投票

Kotlin 中还没有内置的按位或赋值 运算符


0
投票

正如您自己写的那样,这可以完成工作:

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
是个好主意。

© www.soinside.com 2019 - 2024. All rights reserved.