Scala - 提取器

Scala - 提取器 首页 / Scala入门教程 / Scala - 提取器

Scala中的提取器Extractors是一个对象 ,该对象具有称为 unapply 的方法,该方法的目的是匹配值并将其拆开。

让我们以对象定义 apply 和 unapply 方法为示例, apply方法的含义与以往相同:它将Test变成一个对象 ,该对象可以以与应用方法相同的方式应用于括号中的参数。因此,您可以编写Test(" Learnfk"," gmail.com")来构造字符串" Learnfk@gmail.com"。

无涯教程网

unapply 方法将Test类转换为 extractor ,并颠倒了 apply 的构造过程,其中apply接受两个字符串并组成一个电子邮件地址字符串,unapply接受一个电子邮件地址并返回可能的两个字符串:该地址的 user 和 domain 。

Extractors - 语法

unapply("Learnfk@gmail.com") equals Some("Learnfk", "gmail.com")
unapply("Learnfk Ali") equals None

以下示例程序显示了电子邮件地址的提取器对象 。

Extractors - 示例

object Demo {
   def main(args: Array[String]) {
      println ("Apply method : " + apply("Learnfk", "gmail.com"));
      println ("Unapply method : " + unapply("Learnfk@gmail.com"));
      println ("Unapply method : " + unapply("Learnfk Ali"));
   }
   
   //注入方式(可选)
   def apply(user: String, domain: String)={
      user +"@"+ domain
   }

   //提取方法(必填)
   def unapply(str: String): Option[(String, String)]={
      val parts=str split "@"
      
      if (parts.length == 2){
         Some(parts(0), parts(1)) 
      } else {
         None
      }
   }
}

将上述程序保存在 Demo.scala 中。以下命令用于编译和执行该程序。

链接:https://www.learnfk.comhttps://www.learnfk.com/scala/scala-extractors.html

来源:LearnFk无涯教程网

\>scalac Demo.scala
\>scala Demo
Apply method : Learnfk@gmail.com
Unapply method : Some((Learnfk,gmail.com))
Unapply method : None

模式匹配

当类的后跟带有零个或多个参数的列表的括号时,编译器将对该调用 apply 方法,我们可以在对象和类中定义应用。

如上所述,它执行与 apply 应用相反的操作。使用 match 语句比较提取器对象时,将自动执行 unapply 方法。

模式匹配 - 示例

object Demo {
   def main(args: Array[String]) {
      val x=Demo(5)
      println(x)

      x match {
         case Demo(num) => println(x+" is bigger two times than "+num)
         
         //unapply is invoked
         case _ => println("i cannot calculate")
      }
   }
   def apply(x: Int)=x*2
   def unapply(z: Int): Option[Int]=if (z%2==0) Some(z/2) else None
}

将上述程序保存在 Demo.scala 中。以下命令用于编译和执行该程序。

链接:https://www.learnfk.comhttps://www.learnfk.com/scala/scala-extractors.html

来源:LearnFk无涯教程网

\>scalac Demo.scala
\>scala Demo
10
10 is bigger two times than 5

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

iOS开发高手课 -〔戴铭〕

深入拆解Tomcat & Jetty -〔李号双〕

ZooKeeper实战与源码剖析 -〔么敬国〕

全栈工程师修炼指南 -〔熊燚(四火)〕

设计模式之美 -〔王争〕

安全攻防技能30讲 -〔何为舟〕

操作系统实战45讲 -〔彭东〕

React Hooks 核心原理与实战 -〔王沛〕

说透低代码 -〔陈旭〕

好记忆不如烂笔头。留下您的足迹吧 :)