抽取器

  具有名为unapply成员方法的对象叫抽取器(An extractor in Scala is an object that has a method called unapply as one of

its members. )。unapply方法的目的是为了分解值。unapply叫做抽取方法,有了抽取方法的Object就是抽取器。

  unapply方法可有两种返回值类型:Option[T]和Boolean。返回值类型是Option[T]时,若返回None,认为匹配不成功。  unapply方法返回值类型是Boolean时,返回false,认为匹配不成功。

  抽取器_第1张图片

  上图中,有两个模式匹配,第一个为抽取器的模式匹配,第二个为普通的值匹配,二者得到的结果相同(图右为输出)。思考方式为,通过unapply的方法验证匹配是否成功(返回Some()或true),“case Email”后面的“(u,d)”看作为了在后面表达式中使用它们而绑定的值。

下面再举一个复杂一点的抽取器:

 

  object Twice {
    def apply(s: String): String = s + s
    def unapply(s: String): Option[String] = {
      val length = s.length / 2
      val half = s.substring(0, length)
      if (half == s.substring(length)) Some(half) else None


 object UpperCase {
    def unapply(s: String): Boolean = s.toUpperCase == s

  
def userTwiceUpper(s: String) = s match {
    case EMail(Twice(x @ UpperCase()), domain) =>
      "match: "+ x +" in domain "+ domain
    case _ =>

      "no match"



你可能感兴趣的:(Scala)