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

2023-11-25

我该如何在 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • Android 模拟器在 Ubuntu 18.04 上因 SIGSEGV 崩溃

    Android Studio版本 Android Studio 3 1 2 内部版本 AI 173 4720617 建于 2018 年 4 月 14 日 它是从 Ubuntu 的 snap 商店安装的 我使用安装了kvm1 在 Ubuntu
  • 带有 UTF-8 字节顺序标记的 Excel 文件会导致错误

    我只是想知道是否有任何可能的方法来解决这个问题 我在工作中收到包含光纤接头拼接信息的 Excel 文件 当我尝试导入时 我收到一个输出错误 指出第一个表与预期看到的内容不匹配 当我打开它时 我可以看到 UTF 8 的 BOM 为 就在这个词
  • 如何使用QEMU和KGDB调试Linux内核?

    我已经能够使用以下方式启动基于 powerpc 的系统 具体来说是 MPC8544DS 来调用 qemu v1 7 0 qemu system ppc M mpc8544ds m 512 kernel zImage s nographic
  • .htaccess:检查查询字符串是否具有特定值,否则重定向它

    我正在尝试学习一些 htaccess 并且对它的功能感到非常焦虑 我在网上看到了一个片段 但无法让它工作 它基本上是这样的如果查询字符串没有特定值 则将其重定向到index php相反或其他一些页面 我怎么做 这是寻找价值apples ww
  • 更新集合中的大量记录

    我有一个名为TimeSheet现在有几千条记录 这最终将在一年内增加到 3 亿条记录 在这个集合中 我嵌入了另一个名为的集合中的一些字段Department大多数情况下不会得到任何更新 只有很少的记录会被更新 我所说的很少是指一年中只有一两
  • 通过将标记保持在中心来移动地图

    每当我移动地图时 标记也会随之移动 但我想通过保持地图中心的标记不变来移动地图 我怎样才能做到这一点 为什么不将标记添加为视图 将其覆盖在地图顶部
  • removeEventlistener 无法按预期使用箭头函数和参数[重复]

    这个问题在这里已经有答案了 我有一个可以容纳多个可编辑内容的页面 我想在编辑内容时触发某种检查事件 我实现此目的的代码如下所示 Find all editable elements let allEditableElements docum
  • 如何让 Spinner 项目在被单击时以全宽显示在其自身下方,就像在 G+ 应用程序上一样

    背景 Google 有一个类似旋转器的视图 显示很多项目 但所有项目都显示在其下方 我需要在我自己的旋转器中模仿这一点 这是我被告知的 但截至最近 材料设计指南说 here Spinner 应该将其项目放在自身之上 这就是支持库为它所做的事
  • 为什么在构造标准中使用前缀增量被认为比后缀增量更好

    我最近安装了格子风格插件Eclipse并且个人认为非常棒 但它给我的警告之一有点晦涩难懂 确切的警告是 使用 不允许 这是关于postfix的 在某些行中 例如 for int i 0 i lt SOMETHING i 好的 我知道fore
  • C# Windows7/Vista风格ListView

    when I create a ListView in details view in VS2008 it creates a rather old looking listview It doesnt have any of the fa
  • 用 C 或 C++ 创建目录

    如何用C代码创建目录 除了fork和使用mkdir的方法 有类似 dirent h 的东西吗 dirent h 只允许读取目录 不使用外部库 Use the mkdir 函数 include
  • 我可以将一个方法作为java中另一个方法的参数传递吗?

    我正在尝试测量几种方法的执行时间 所以我想创建一个方法而不是多次重复相同的代码 这是我的代码 private void MeasureExecutionTime Method m startTime System nanoTime try
  • Android:如何构建像 Android UI 页面上显示的选项卡

    因此 android 不遗余力地构建了这个漂亮的 UI 指南供每个人使用 但我没有看到任何地方显示如何构建这些元素的代码示例 可以在此处找到选项卡的 UI 指南 http developer android com design build
  • char数组的内存分配

    假设你有 struct Person char name int age int height int weight 如果你这样做 struct Person who malloc sizeof struct Person C 如何知道要分
  • 我可以在 Entity Framework Core 中的连接数据库上触发事件吗?

    我有一个 DbContext 可以访问我的 Postgresql DB 但是当连接会话与 DB 启动时 我需要运行一个小 SQL 命令 我需要为每次交互执行此操作 更具体地说 它是一个用于设置记录用户名的会话变量的函数 可以在 EF Cor
  • 如何在不注册的情况下使用 Win32 中的 .Net 程序集?

    我想从 Delphi Win32 应用程序动态加载和使用用 C 创建的 Net 程序集 我的类和接口被标记为 ComVisible 但我想避免注册程序集 这可能吗 附 我在这里找到了链接文本关于该主题的另一个很好的讨论 但它更多地围绕托管
  • 自定义元素的绑定上下文 - 它到底是什么,如何访问父虚拟机

    我在文档中找不到答案 所以我在这里提问 传递给的绑定上下文到底是什么bind自定义元素的方法 它简单地等于路由器当前活动的 ViewModel 至少 这是我到目前为止所发现的 为什么它不是元素的父级 就 DOM 而言 VM 用这个代码 cu
  • 如何弯曲CGMutablePath?

    具有以下形状 我想知道你如何让它像这样弯曲 也类似 我假设所有的圆 线都被打包成一个CGMutablePath 然后对它应用某种曲线 圆弧或四边形曲线 尽管我很难复制它 有谁知道如何做到这一点 在第一个示例中 您从具有多个闭合子路径的路径开
  • 用于处理文件路径的 Qt 类[重复]

    这个问题在这里已经有答案了 可能的重复 Qt 相当于 PathAppend Qt 中有处理文件路径的类吗 特别是我正在寻找像 NET 的 Path Combine 这样的东西 我知道 boost filesystem 中有一个 但我想知道
  • Scala 开关在成功匹配后继续匹配下一个案例

    我该如何在 scala switch 语句中执行一个 case 块后开始执行另一个 case 块 在java中 没有中断的情况 switch step case 0 do something case 1 do something more