scala 中的匹配模式

吃可爱长大的小学妹 提交于 2019-12-06 02:33:31

unapply

仅作匹配,不作其它输出。返回 Boolean 值

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

val s = "AA"

s match {
  case x @ UpperCase() => println(x)
  case _ => "other"
}

 匹配内部数据。返回 Option[Tuple](跟 case class 类似)

object Email {
    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
    }
}

private val e = Email("23", "qq.com")
println(e)

 

unapplySeq

匹配内部数据,返回 Option[Seq]

object Domain{
  def apply(parts:String *) :String = parts.reverse.mkString(".")
  def unapplySeq(whole:String): Option[Seq[String]] =
    Some(whole.split("\\.").reverse)
}

val Domain(p, _*) = Domain("com", "xiangzhi", "c")
println(p)

  

正则表达式

匹配捕获组返回参数(跟 case class 类似)

val date = "(\\d{4})-(\\d{2})-(\\d{2})".r

val p = "2004-01-20" match {
  case date(year, _*) => s"$year was a good year for PLs."
}
println(p)

 

 

233

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!