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 的两倍!
相关推荐
hboot2 小时前
AI工程师第六课 - RAG检索增强生成
后端·langchain·llm
码哥DFS3 小时前
二叉树的直径
开发语言·javascript·算法
mldong3 小时前
jeeflow:98KB 的工作流引擎长什么样
后端
paopaokaka_luck3 小时前
基于springboot3+vue3的企业考勤管理系统(部门树递归、Echarts图形化分析)
开发语言·spring boot·学习·echarts·mybatis·需求分析·代码规范
梦雨生生5 小时前
java开发工具(学习第一天)
java·开发语言·学习
程序员cxuan6 小时前
速度太快了!本地可以跑 DeepSeek-V4-Flash 了
人工智能·后端·程序员
啊啊啊啊啊!!!!6 小时前
【c++】stack和queue的接口使用以及底层实现
开发语言·c++
阿祖zu7 小时前
芝士就是力量!开源私有化部署与 GitHub 双向同步的个人知识笔记 App
前端·后端·ios
松仔log7 小时前
Java中级——组合和继承
android·java·开发语言
不才不才不不才7 小时前
Spring 源码系列(16): doDispatch 全流程——一次请求的主干链路
java·后端·spring