Scala仙境:案例类和模式匹配

模式匹配通常与文本搜索有关。 在Scala中,它的用法要复杂得多。 与案例类一起使用时,您可以编写令人兴奋的决策逻辑。 即使在理解了这两件事的含义之后,我还是无法使用它们应有的价值。 真正掌握它们需要一些时间。 漫长而曲折的道路。

当必须编写复杂的代码时,案例类可以轻松进行模式匹配。 有关介绍,请参见官方文档 。 让我们看一些更有趣的例子。

案例类除外

case class MyException(msg: String) extends Exception(msg)

原因是异常捕获实际上是模式匹配。 捕获块包含模式,如果存在匹配,则执行相关代码段。 以下代码演示了这一点。 当异常是RuntimeException或IOException时,第二种情况匹配。

try { ...
} catch {
  case ex: MyException => Logger.error(ex.toString)
  case ex @ (_ : SQLException | _ : IOException) => println(ex)
}

普通的旧数据持有人

如果将一个类设计为只是一个没有任何方法的数据持有人,则建议将其作为案例类。 从句法上讲,构造新实例更容易,并且根据定义,可以从外部访问案例类的构造函数参数。 也可以使用模式匹配在结构上分解它们。 这非常方便。

结构分解

模式不仅用于指定条件,还用于分解要匹配的对象。 以下示例尝试根据提供的键在地图中查找元组。 如果找到一个,则返回元组的第二项,即字符串。 那就是分解。 如果找不到任何内容,则返回N / A。 如果您好奇为什么会有双括号((...)),则原因是外括号表示函数调用,而内括号表示两个项目的元组。

def getValue(key: Int, data: Map[Int, (Int, String)]): String = {
  data.get(key) match {
    case Some((num, text)) => text
    case _ => "N/A"
  }
}

这两个生物在我的代码中越来越多地出现。 是的,不要忘记,如果您检查前面的代码,您会看到该函数应该返回一个字符串,但是没有return语句。 在Scala中,结果值是最后一条语句的值。 在这里,根据模式匹配,我们还有更多的最后一条语句,但是我们涵盖了所有可能的执行路径,并且始终返回字符串。 编译器很高兴,我们也很高兴。

参考: Scala Wonderland: Rado Buransky博客博客中我们的JCG合作伙伴 Rado Buransky的案例类和模式匹配

翻译自: https://www.javacodegeeks.com/2013/09/scala-wonderland-case-classes-and-pattern-matching.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值