• scala模式匹配


    这是Scala中最有用的部分之一。

    匹配值

    val times = 1
    
    times match {
      case 1 => "one"
      case 2 => "two"
      case _ => "some other number"
    }
    

    使用守卫进行匹配

    times match {
      case i if i == 1 => "one"
      case i if i == 2 => "two"
      case _ => "some other number"
    }
    

    注意我们是怎样将值赋给变量’i’的。

    在最后一行指令中的_是一个通配符;它保证了我们可以处理所有的情况。
    否则当传进一个不能被匹配的数字的时候,你将获得一个运行时错误。我们以后会继续讨论这个话题的。

    参考 Effective Scala 对什么时候使用模式匹配模式匹配格式化的建议. A Tour of Scala 也描述了 模式匹配

    匹配类型

    你可以使用 match来分别处理不同类型的值。

    def bigger(o: Any): Any = {
      o match {
        case i: Int if i < 0 => i - 1
        case i: Int => i + 1
        case d: Double if d < 0.0 => d - 0.1
        case d: Double => d + 0.1
        case text: String => text + "s"
      }
    }
    

    匹配类成员

    还记得我们之前的计算器吗。

    让我们通过类型对它们进行分类。

    一开始会很痛苦。

    def calcType(calc: Calculator) = calc match {
      case _ if calc.brand == "hp" && calc.model == "20B" => "financial"
      case _ if calc.brand == "hp" && calc.model == "48G" => "scientific"
      case _ if calc.brand == "hp" && calc.model == "30B" => "business"
      case _ => "unknown"
    }
    

    (⊙o⊙)哦,太痛苦了。幸好Scala提供了一些应对这种情况的有效工具。

  • 相关阅读:
    C# 和 java 基本数据类型
    ESB
    sql server和mysql到底有什么区别
    MySQL服务器线程池插件
    Index Merge 算法
    任职22年,PowerShell之父将从微软离职:曾因开发PowerShell被微软降级过
    Umi 4 发布啦 🎈
    VB/VBA,可能超乎你的想象
    消息推送的场景
    DPI
  • 原文地址:https://www.cnblogs.com/lixiaolun/p/5542642.html
Copyright © 2020-2023  润新知