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 小时前
Rust 泛型 Generics详解:编写可复用且类型安全的代码
后端·面试·rust
格林威6 小时前
C#图像处理:使用imagemagick实现像素放大水印转换等多种功能
android·开发语言·图像处理·人工智能·计算机视觉·c#·视觉检测
小满zs6 小时前
Go语言第九章(错误处理)
后端·go
桦说编程6 小时前
深入理解 FutureTask 状态机——从契约到实现
java·后端·性能优化
程序员爱钓鱼6 小时前
Go 编程实战:指针 Pointer——理解地址、取址与解引用
后端·面试·go
wifi___11 小时前
全局异常处理的原理
java·开发语言
平常心的技术小牛14 小时前
Qt-快速上手-QMenuBar
开发语言·qt
青 春 记 忆15 小时前
零基础入门Python11|Git实战:为任务管理器建立版本历史
开发语言·git·vscode·python·python3.11
To_OC15 小时前
从一行入口代码啃透 NestJS:工厂模式、装饰器和依赖注入是怎么串起来的
后端·设计模式·nestjs
Python私教15 小时前
多个项目怎么安全合并?先适配,再切换
后端·python·架构