Scala提取器使用实例分析(scala,开发技术)

时间:2024-05-09 13:41:14 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :
Scala提取器使用实例分析

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提取器使用实例分析的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:MapReduce的Shuffle机制是什么下一篇:

19 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18