Scala基础—提取器Extractor使用示例

来源:互联网 发布:公务员 网络课程 攻略 编辑:程序博客网 时间:2024/05/16 06:03

package com.spark.scala.basics/**  * 1.  */case class Person1(name: String, age: Int)class Coder(val name:String, val salary: Int)object Coder {  def apply(name:String, salary: Int): Unit = {    println("Coder apply method invoked!!")    new Coder(name, salary)  }  def unapply(information: String) = { //提取,用Some封装成Tuple    Some((information.substring(0, information.indexOf(" ")), information.substring(information.indexOf(" ") + 1)))  }}object ExtractorDemo {  def main(args: Array[String]): Unit = {    val person = Person1("Spark", 6) //调用apply工厂构造方法,构造出类的实例对象    val Person1(name, age) = person // 对象直接赋值给类,调用unapply()person实例中的nameage提取出来并赋值给Person1的成员    println(name + " : " + age) //Spark : 6    person match {      case Person1(name, age) => println("name is " + name + " and age is " + age + ".")    }    val Coder(codername, salary) = "Spark 1000,000"  }}
package com.expgiga.ScalaTest/**  * 在实例化一个类的时候,可以带上0个或者多个参数,编译器在实例化的时候会调用apply方法。可以在类和对象中都定义apply方法。  * unapply方法提取指定查找的值,它与apply的操作相反。当在提取器对象中使用match语句时,unapply将自动执行  */object ApplyTest {  def main(args: Array[String]): Unit = {    val x = ApplyTest(5)    println(x)    x match {      case ApplyTest(num) => println(x + "  " + num + " 的两倍!")      case _ => println("无法计算!")    }  }  def apply(x: Int) = {    println("调用apply方法!")    x * 2  }  def unapply(z: Int): Option[Int] = {    println("调用unapply方法!")    if(z % 5 == 0) Some(z / 5) else None  }}




原创粉丝点击