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 的两倍!
相关推荐
SamDeepThinking1 分钟前
CyclicBarrier的底层实现
java·后端·面试
god_cvz2 分钟前
第二章:6、对话记忆与引用标注
后端·ai编程
拖孩2 分钟前
全程 AI 写的小程序,刚接上会员虚拟支付,上线第二天就有人真金白银买单了|双签名、定价、iOS 的坑我全踩了一遍
前端·后端·微信小程序
我是人✓2 分钟前
SpringMVC异常处理与拦截器实战揭秘
java·开发语言·后端
仟里码3 分钟前
九:goroutine(1.什么是协程)
后端
不是万能的豆学长13 分钟前
排查Go服务40天后的内存泄漏问题
开发语言·后端·golang·go
阿狗童鞋13 分钟前
SpringSecurity权限认证实战指南
java·后端·spring
码匠许师傅16 分钟前
【C++三方组件】libpqxx:PostgreSQL 的 C++ 客户端
开发语言·c++·postgresql
韩振方17 分钟前
Kubernetes Service 让会更换的 Pod 有稳定访问入口
后端
用户1257585243617 分钟前
Golang后台管理框架推荐:XYGo Admin与devinggo怎么选?
后端·go·ai编程