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 的两倍!
相关推荐
苍何7 小时前
偷偷分享 DeepSeek Harness 热榜挖到的 2 个实⽤插件
后端
淼澄研学7 小时前
Python结合大模型挖掘搜题长尾关键词实操指南
开发语言·python
神奇小汤圆7 小时前
面试官问:"你们上线前怎么测Agent系统?上线后怎么知道它好不好?"
后端
FfHUCisI7 小时前
Golang - 信号量模式(Semaphore Pattern)
开发语言·后端·golang
神奇小汤圆7 小时前
Redis 和 MySQL 如何保证数据一致性?先更新数据库还是先删缓存,延迟双删、MQ、Canal 一次讲透
后端
m0_547486667 小时前
《Java程序设计与实践 》全套PPT课件2026
java·开发语言
犹豫的果冻布丁8 小时前
从零给 DeepSeek Harness 写一个壁纸皮肤插件(已开源)
前端·后端
weixin_431600448 小时前
NestJS 入门(10):日志——为什么常用 Winston?
后端·学习·日志·nest.js·winston
步行cgn9 小时前
MyBatis <where> 标签详解:让你的动态 SQL 更优雅、更安全
后端
灵析表格9 小时前
灵析表格财务函数深度实用性分析与实操教程
开发语言·ai·json·excel·wps