抽取器

  具有名为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,认为匹配不成功。

  

  上图中,有两个模式匹配,第一个为抽取器的模式匹配,第二个为普通的值匹配,二者得到的结果相同(图右为输出)。思考方式为,通过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"



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值