Scala提取器使用实例分析
导读:本文共1628.5字符,通常情况下阅读需要5分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: Scala 提取器是一个带有unapply方法的对象。unapply方法算是apply方法的反向操作:unapply接受一个对象,然后从对象中提取值,提取的值通常是用来构造该对象的值。以下实例演示了邮件地址的提取器对象:objectTest{defmain(args:Array[String]){println("Apply方法:"+a... ...
目录
(为您整理了一些要点),点击可以直达。Scala 提取器是一个带有unapply方法的对象。unapply方法算是apply方法的反向操作:unapply接受一个对象,然后从对象中提取值,提取的值通常是用来构造该对象的值。
以下实例演示了邮件地址的提取器对象:
objectTest{defmain(args:Array[String]){println("Apply方法:"+apply("Zara","gmail.com"));println("Unapply方法:"+unapply("Zara@gmail.com"));println("Unapply方法:"+unapply("ZaraAli"));}//注入方法(可选)defapply(user:String,domain:String)={user+"@"+domain}//提取方法(必选)defunapply(str:String):Option[(String,String)]={valparts=strsplit"@"if(parts.length==2){Some(parts(0),parts(1))}else{None}}}
执行以上代码,输出结果为:
$scalacTest.scala$scalaTestApply方法:Zara@gmail.comUnapply方法:Some((Zara,gmail.com))Unapply方法:None
以上对象定义了两个方法: apply 和 unapply 方法。通过 apply 方法我们无需使用 new 操作就可以创建对象。所以你可以通过语句 Test(“Zara”, “gmail.com”) 来构造一个字符串 “Zara@gmail.com“。
unapply方法算是apply方法的反向操作:unapply接受一个对象,然后从对象中提取值,提取的值通常是用来构造该对象的值。实例中我们使用 Unapply 方法从对象中提取用户名和邮件地址的后缀。
实例中 unapply 方法在传入的字符串不是邮箱地址时返回 None。代码演示如下:
unapply("Zara@gmail.com")相等于Some("Zara","gmail.com")unapply("ZaraAli")相等于None
提取器使用模式匹配
在我们实例化一个类的时,可以带上0个或者多个的参数,编译器在实例化的时会调用 apply 方法。我们可以在类和对象中都定义 apply 方法。
就像我们之前提到过的,unapply 用于提取我们指定查找的值,它与 apply 的操作相反。 当我们在提取器对象中使用 match 语句是,unapply 将自动执行,如下所示:
objectTest{defmain(args:Array[String]){valx=Test(5)println(x)xmatch{caseTest(num)=>println(x+"是"+num+"的两倍!")//unapply被调用case_=>println("无法计算")}}defapply(x:Int)=x*2defunapply(z:Int):Option[Int]=if(z%2==0)Some(z/2)elseNone}
执行以上代码,输出结果为:
$scalacTest.scala$scalaTest1010是5的两倍!
</div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
Scala提取器使用实例分析的详细内容,希望对您有所帮助,信息来源于网络。