匹配"fallthrough":为多个案例执行相同的代码?

Vla*_*dim 39 scala

什么是Scala编写以下代码的方法:

 int i;

 switch(i) {
   case 1:  
         a();
         break;

   case 2:
   case 15:
        b();
        c();
        break;

   default: foo()        
 } 
Run Code Online (Sandbox Code Playgroud)

即基于多个案例值执行同一段代码的惯用方法是什么?

 i match {
   case 1  => a    
   case 2  =>
   case 15 => { b
                c }
   case _ => foo        
 } 
Run Code Online (Sandbox Code Playgroud)

似乎没有这个技巧,因为Scala根据第一个匹配的情况评估匹配值,即如果i = 2,代码将不返回任何内容.

感谢帮助!

mid*_*dus 52

根据这个对话,没有任何影响,但你可以利用|.

这应该做的伎俩:

i match {
  case 1  => a    
  case 2 | 15 => b
                 c
  case _ => foo        
} 
Run Code Online (Sandbox Code Playgroud)

  • 我删除了`b`和`c`周围的`{`和`}`,以表明它们是不必要的. (3认同)

Aar*_*ron 10

Case语句实际上可以包含使用标准if语句的其他逻辑保护.所以你可以这样做:

i match {
  case x if x == 1 => a
  case x if (x == 2 | x == 15) => b; c;
  case _ => foo
}
Run Code Online (Sandbox Code Playgroud)

匹配的保护可以是任何布尔函数或函数组合,因此它比Java中的标准switch语句提供更多的功能.