您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“scala的提取器對(duì)象是什么”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“scala的提取器對(duì)象是什么”吧!
unapply
方法的單例對(duì)象。
apply
方法就像一個(gè)構(gòu)造器,接受參數(shù)然后創(chuàng)建一個(gè)實(shí)例對(duì)象,反之
unapply
方法接受一個(gè)實(shí)例對(duì)象然后返回最初創(chuàng)建它所用的參數(shù)。
提取器常用在模式匹配和偏函數(shù)中。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
創(chuàng)建一個(gè)
CustomerID
字符串。
而
unapply
方法正好相反,它返回
name
。
當(dāng)我們調(diào)用
CustomerID("Sukyoung")
,其實(shí)是調(diào)用了
CustomerID.apply("Sukyoung")
的簡(jiǎn)化語(yǔ)法。
當(dāng)我們調(diào)用
case CustomerID(name) => println(name)
,就是在調(diào)用提取器方法。val customer2ID = CustomerID("Nico")val CustomerID(name) = customer2IDprintln(name)
val CustomerID(name2) = "--asdfasdfasdf"
scala.MatchError
:val CustomerID(name3) = "-asdfasdfasdf"
unapply
方法的返回值應(yīng)當(dāng)符合下面的某一條:Boolean
類(lèi)型的值。case even()
。Option[T]
。T1,...,Tn
,可以把它們放在一個(gè)可選的元組中 Option[(T1,...,Tn)]
。unapplySeq
方法來(lái)定義提取器,此方法返回
Option[Seq[T]]
。常見(jiàn)的例子有,用
case List(x, y, z) =>
來(lái)解構(gòu)一個(gè)列表
List
,以及用一個(gè)正則表達(dá)式
Regex
來(lái)分解一個(gè)字符串
String
,例如case r(name, remainingFields @ _*) =>
到此,相信大家對(duì)“scala的提取器對(duì)象是什么”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。