int num = 100;
char c = 'a';
c = someBigTask(c);
switch (c) {
case 'a':
num += 100;
case 'c':
num += 10;
case 'd':
case 'e':
num += 100;
}
我想在其他情况下通过“当”表达式来消除相同的代码,例如这种切换用例代码,但是我找不到解决方法。.
我确实喜欢这个问题:
var num = 0
when(c){
'a' -> num += 100
'a', 'c' -> num += 10
'a', 'c', 'd', 'e' -> num += 100
else -> 0
}
我得到的结果仅是'a' -> num += 100
。.
在此问题中,我能否仅使用“何时”表达来获得解决方案?
答案 0 :(得分:2)
在Kotlin中,等效的when
表达式如下:
val c = // some char
val num = 100 + when (c) {
'c' -> 10
'a', 'd', 'e' -> 100
else -> 0
}
请注意,在这种情况下,else
的情况必须用作when
must be exhaustive,因为它被用作en表达式,即它必须覆盖c
的所有可能值。例如,如果c
是Boolean
(或enum
或任何其他域有限的值),那么您可能已经涵盖了所有可能的情况而没有else
情况,因此编译器将允许以下操作:
val c = // some boolean
val num = 100 + when (c) {
true -> 10
false -> 0
}
如果 when
不是用作表达式而是用作传统的控制流语句(例如Java 12之前的switch
语句),则不需要穷举,如以下代码片段所示:< / p>
val c = // some char
var num = 100
when (c) {
'a', 'd', 'e' -> num += 100
'c' -> num += 10
}