当前位置: 首页 > 面试题库 >

Scala开关在成功匹配后继续匹配下一个案例

葛季萌
2023-03-14
问题内容

我如何在scala switch语句中执行一个case块后开始执行另一个case块的语句。(在Java中:不间断的情况)。

switch(step) {
    case 0: do something;
    case 1: do something more;
    case 2: etc...;
            break;
    default: do something else;
}

感谢帮助!


问题答案:

如果无法使用0 | 1 | 2,可以使用一系列操作来解决,例如:

def switch[T](i: T)(actions: (T, () => Unit)*)(default: => Unit) = {
  val acts = actions.dropWhile(_._1 != i).map{_._2}
  if (acts.isEmpty) default
  else acts.foreach{_()}
}

def myMethod(i: Int): Unit = 
  switch(i)(
    0 -> {() => println("do 0")},
    1 -> {() => println("do 1")},
    2 -> {() =>
      println("do 2")
      return // instead of break
    },
    3 -> {() => println("do 3")}
  )(default = println("do default"))


myMethod(1)
// do 1
// do 2

myMethod(3)
// do 3

myMethod(5)
// do default


 类似资料:
  • 主要内容:实例,实例,使用样例类,实例Scala 提供了强大的模式匹配机制,应用也非常广泛。 一个模式匹配包含了一系列备选项,每个都开始于关键字 case。每个备选项都包含了一个模式及一到多个表达式。箭头符号 => 隔开了模式和表达式。 以下是一个简单的整型值模式匹配实例: 实例 object Test {     def main (args : Array [String ] ) {       println (matchTes

  • Scala 提供了强大的模式匹配机制,应用也非常广泛。 一个模式匹配包含了一系列备选项,每个都开始于关键字 case。每个备选项都包含了一个模式及一到多个表达式。箭头符号 => 隔开了模式和表达式。 以下是一个简单的整型值模式匹配实例: object Test { def main(args: Array[String]) { println(matchTest(3))

  • 问题内容: 我正在尝试匹配模式: 以下仅匹配第一次出现的情况: 结果是: 但是,[使用pythex似乎可以正常工作](http://pythex.org/?regex=%3C–(%5B%5Cw%5Cs%5D%2B)–%3E(%5B%5Cs%5CS%5D*%3F)(%3F%3D%5Cn%3C–%7C%24)&test_string=%3C–%20Option%201%20–%3E%0ANice%20

  • 本文向大家介绍浅谈Scala模式匹配,包括了浅谈Scala模式匹配的使用技巧和注意事项,需要的朋友参考一下 一.scala模式匹配(pattern matching) pattern matching可以说是scala中十分强大的一个语言特性,当然这不是scala独有的,但这不妨碍它成为scala的语言的一大利器。 scala的pattern matching是类似这样的, 其中,变量e后面接一个

  • 问题内容: 我想从服务器日志中获取“ GET ”查询。 例如,这是服务器日志 当我尝试使用简单的grep或awk时, 它发出 我只想显示: hello 和 ss 有什么办法可以做到吗? 问题答案: 假设您有gnu grep,则可以使用perl样式的regex进行正向查找: 如果您没有gnu grep,那么我建议您只使用sed: 如果您碰巧使用过gnu sed,可以将其大大简化: 最重要的是,您当然

  • 我能不能把下面两个案例合并成一个子句,因为它们都做同样的事情? 此外,如果我想使用匹配,