Scala提取器使用模式匹配

在实例化一个类时,可以带上0个或者多个的参数,编译器在实例化时会调用 apply 方法。我们可以在类和对象中都定义 apply 方法。

unapply 用于提取指定查找的值,它与 apply 的操作相反。当在提取器对象中使用 match 语句是,unapply 将自动执行,如下所示:

复制代码
object Test {
   def main(args: Array[String]) {
     
      val x = Test(5)
      println(x)

      x match
      {
         case Test(num) => println(x + " 是 " + num + " 的两倍!")
         //unapply 被调用
         case _ => println("无法计算")
      }

   }
   def apply(x: Int) = x*2
   def unapply(z: Int): Option[Int] = if (z%2==0) Some(z/2) else None
}

执行以上代码,输出结果为:

复制代码
$ scalac Test.scala 
$ scala Test
10
10 是 5 的两倍!
相关推荐
云边有个稻草人6 小时前
从日志到落库:数据集成产品 KFS 如何打通异构数据库实时同步链路
后端
努力小陈16 小时前
从 Java 到 Go:后端工程师的 30 分钟语法速查
后端
Thneonl6 小时前
一个 502,十种病因:nginx 反代排障分诊树
后端·架构
花间相见6 小时前
【计算基础|MySQL09】索引(下):失效与设计
数据库·后端·面试
南丘山6 小时前
接口自动化测试从零搭:31 条用例跑 4 秒,抓出 6 个权限缺陷
后端
掘金小豆6 小时前
Spring AI 实战:从一次可运行的模型调用到 RAG 体系
后端·程序员·ai编程
前端小万6 小时前
探索副业五个月,最终以放弃告终
前端·后端·面试
用户87359865635876 小时前
Bias-Variance Tradeoff
后端
今天早睡6 小时前
TypedDict 还是 Pydantic?
后端
木易 士心6 小时前
Java 后端驱动远程手机自动化:ADB + Python + 内网穿透实战全解
java·后端·智能手机·自动化