本篇内容主要讲解“scala的提取器对象是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“scala的提取器对象是什么”吧!
unapply
方法的单例对象。
apply
方法就像一个构造器,接受参数然后创建一个实例对象,反之
unapply
方法接受一个实例对象然后返回最初创建它所用的参数。
提取器常用在模式匹配和偏函数中。import scala.util.Randomobject CustomerID { def apply(name: String) = s"$name--${Random.nextLong}" def unapply(customerID: String): Option[String] = { val stringArray: Array[String] = customerID.split("--") if (stringArray.tail.nonEmpty) Some(stringArray.head) else None }}val customer1ID = CustomerID("Sukyoung") customer1ID match { case CustomerID(name) => println(name) case _ => println("Could not extract a CustomerID")}
apply
方法用
name
创建一个
CustomerID
字符串。
而
unapply
方法正好相反,它返回
name
。
当我们调用
CustomerID("Sukyoung")
,其实是调用了
CustomerID.apply("Sukyoung")
的简化语法。
当我们调用
case CustomerID(name) => println(name)
,就是在调用提取器方法。val customer2ID = CustomerID("Nico")val CustomerID(name) = customer2IDprintln(name)
val CustomerID(name2) = "--asdfasdfasdf"
scala.MatchError
:val CustomerID(name3) = "-asdfasdfasdf"
unapply
方法的返回值应当符合下面的某一条:Boolean
类型的值。case even()
。Option[T]
。T1,...,Tn
,可以把它们放在一个可选的元组中 Option[(T1,...,Tn)]
。unapplySeq
方法来定义提取器,此方法返回
Option[Seq[T]]
。常见的例子有,用
case List(x, y, z) =>
来解构一个列表
List
,以及用一个正则表达式
Regex
来分解一个字符串
String
,例如case r(name, remainingFields @ _*) =>
到此,相信大家对“scala的提取器对象是什么”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。