我知道when { }
可以替代if-else分支。但是,如果条件成立,是否可以执行多个分支?
示例:
val x = 5
val y = 4
when {
x.isOdd() -> print("x is odd") //True, prints "x is odd"
y.isEven() -> print("y is even") //Also True, but doesn't get executed
else -> print("x+y is even.")
}
有什么办法可以执行第二行吗?
答案 0 :(得分:1)
无法使用when
语句执行此操作,因为when
语句仅执行具有真实条件的第一个块。
在存在许多不同条件的情况下执行此操作的最佳方法,其中任意多个条件都可能为真且应执行,然后如果其中的 none 不为真,则要执行一个块,是使用if
语句并保留Boolean
变量(在下面的示例中为handled
)来跟踪是否已执行任何操作,例如:
fun Int.isOdd() = this % 2 != 0
fun Int.isEven() = this % 2 == 0
val x = 5
val y = 4
var handled = false
if (x.isOdd()) {
println("x is odd")
handled = true
}
if (y.isEven()) {
println("y is even")
handled = true
}
// Add however many other conditions here
if (!handled) {
// This will be executed if none of the above conditions are satisfied
print("x is not odd and y is not even.")
}
此打印:
x is odd
y is even
答案 1 :(得分:-1)
如果要同时显示两个打印机,为什么不将两个打印机都放在同一主体中。
赞:
when {
x.isOdd() && y.isEven() -> {print("x is odd\n y is even") }
else -> print("x+y is even.")
}
答案 2 :(得分:-1)
正如您在问题中说的,何时代替if-else。如果在示例中使用if-else,则仅打印第一项。第一个条件为真,因此将不检查第二个条件。您可以使用以下内容:
val x = 5
val y = 4
if x.isOdd()
print("x is odd")
if y.isEven()
print("y is even")
if ((!x.isOdd())&&(y.isEven())||(x.isOdd())&&(!y.isEven()))
print("x+y is even.")