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 的两倍!
相关推荐
kevin_水滴石穿6 分钟前
C#获取程序集和文件版本
开发语言·c#
javadaydayup8 分钟前
MyBatis 映射值报错的罪魁祸首竟然是 Lombok 的 @Builder?
后端
we1less8 分钟前
[audio] AudioTrack (五) 共享内存创建分析
android·java·开发语言
一 乐9 分钟前
景区管理|基于springboot + vue景区管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·学习
傻啦嘿哟12 分钟前
实战:用GraphQL接口高效采集数据
开发语言·驱动开发·php
JIngJaneIL12 分钟前
基于java + vue连锁门店管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot
秃了也弱了。13 分钟前
python实现离线文字转语音:pyttsx3 库
开发语言·python
superman超哥13 分钟前
Rust 减少内存分配策略:性能优化的内存管理艺术
开发语言·后端·性能优化·rust·内存管理·内存分配策略
BingoGo14 分钟前
CatchAdmin 2025 年终总结 模块化架构的进化之路
后端·开源·php
t1987512816 分钟前
基于射线理论的水声信道仿真MATLAB程序
开发语言·matlab