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 的两倍!
相关推荐
老苗项目实战8 小时前
Java工程师高频面试题(基于近一年的真实面试记录整理)
java·开发语言·面试·预见猿份·老苗项目实战
薛定谔的悦8 小时前
一套储能 BMS 的充电电流限值,是怎么一步步算出来的
后端
小小、码农8 小时前
C++11右值引用与移动语义 —— 从拷贝资源到转移资源
开发语言·网络·c++·网络协议
逐米时代8 小时前
AR加知识库提升一次修复率
后端·restful
for_ever_love__8 小时前
python基础语法学习: requirements.txt
开发语言·python·学习
王码码20358 小时前
Go语言CGO:Go与C交互
后端·golang·go·接口
XiaoYu1__8 小时前
JavaGUI文件管理系统开发实战:从静态展示到动态交互的演进
java·开发语言
for_ever_love__8 小时前
python基础语法学习: 动态类型
开发语言·python·学习
霸道流氓气质8 小时前
MCP(Model Context Protocol)核心概念与Java SDK集成
java·开发语言
企查查数据服务8 小时前
全军禁入下客商准入风控,关联图谱与穿透核查
大数据·开发语言·数据库·php