Scala的神奇语法

博主接触过Java,Python,C,C++几门主流语言,但今天在学习Scala中又见识到了新奇的地方,是从其他语言没接触过的。特分享出来供大家参考。

有关Scala的模式匹配问题,

//匹配样例类
//scala可以使用模式匹配来匹配样例类,从而可以快速获取样例类中的成员数据。

// 定义样例类
case class SubmitTask(id: String, name: String)
case class HeartBeat(time: Long)
case object CheckTimeOutTask

val msg1 = SubmitTask("001", "task-001")
val msg2 = HeartBeat(1000)
val msg3 = CheckTimeOutTask

val list = List(msg1, msg2, msg3)


可以使用@符号分隔case语句,用来获取用于匹配的整个示例对象
list(0) match {
    // obj表示获取用于匹配的样例对象,而id,name表示获取样例中的元素
    case  obj @ SubmitTask(id, name) => println(s"id=$id, name=$name");println(s"样例类:$obj")
    case HeartBeat(time) => println(s"time=$time")
    case CheckTimeOutTask => println("检查超时")
}

这段代码的阅读我想大多数人是没问题的,然而关键是Scala的模式匹配加上正则表达式会是怎样呢?让我们再看一段代码

//用来匹配邮箱
    val emailRE = """.+@(.+)\..+""".r
    val emailList = List("38123845@qq.com", "a1da88123f@gmail.com", "zhansan@163.com", "123afadff.com")
    println("邮箱的运营公司为")
    emailList.foreach {
      // email表示获取用于匹配的样例对象,而company表示获取样例中的元素
      case email@emailRE(company) => println(s"$email => ${company}")
      case _ => println("未知")
    }

代码运行结果是:

邮箱的运营公司为
38123845@qq.com => qq 
a1da88123f@gmail.com => gmail 
zhansan@163.com => 163 
未知

这里我相信大多数人都和博主一样好奇,为啥他就只返回公司名称呢?

博主在询问老师后说是正则表达式问题,我就开始怀疑@后加了括号的正则匹配,于是做出了修改如下

    val emailRE = """(.+)@(.+)\..+""".r
    val emailList = List("38123845@qq.com", "a1da88123f@gmail.com", "zhansan@163.com", "123afadff.com")
    println("邮箱的运营公司为")
    emailList.foreach {
      // email表示获取用于匹配的样例对象,而company表示获取样例中的元素
      case email@emailRE(name,company) => println(s"$email => ${name}=> ${company} ")
      case _ => println("未知")
    }

不出意外的结果显示出了新的结果:

邮箱的运营公司为
38123845@qq.com => 38123845=> qq 
a1da88123f@gmail.com => a1da88123f=> gmail 
zhansan@163.com => zhansan=> 163 
未知

哈哈哈,所谓的模式匹配,是不是很神奇呢?博主也是第一次遇到,见此作为记录。

如需转载,请说明出处。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值