加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何使用多个参数列表匹配一个类?

发布时间:2020-12-16 09:35:45 所属栏目:安全 来源:网络整理
导读:考虑这个类: class DateTime(year: Int,month: Int,day: Int)(hour: Int,minute: Int,second: Int) 如果我想与以下类似的对象匹配,那么未应用的方法如何呢? dt match { case DateTime(2012,12,12)(12,_,_) = // December 12th 2012,12 o'clock /* ... */}
考虑这个类:

class DateTime(year: Int,month: Int,day: Int)(hour: Int,minute: Int,second: Int)

如果我想与以下类似的对象匹配,那么未应用的方法如何呢?

dt match {
  case DateTime(2012,12,12)(12,_,_) => // December 12th 2012,12 o'clock
  /* ... */
}

我试过这个:

def unapply(dt: DateTime) = 
  Some((dt.year,dt.month,dt.day),(dt.hour,dt.minute,dt.second))

但那没有真正的工作。

解决方法

案例类与第一组参数匹配(并且做其他漂亮的事情):

scala> case class A(i: Int)(j: Int) { }
defined class A

scala> A(5)(4) match { case A(5) => "Hi" }
res14: java.lang.String = Hi

scala> A(5)(4) == A(5)(9)
res15: Boolean = true

如果它不是一个case类,你可以将unapply定义为任何你想要的东西,所以这完全取决于类的实现者。默认情况下,没有取消应用,因此您只能在类型上进行匹配。

如果您想使用漂亮的案例类功能,包括能够匹配并在所有内容上实现平等,但有某种划分,您可以嵌套案例类:

case class Time(hour: Int,second: Int) { }
case class Date(year: Int,day: Int) { }
case class DateTime(date: Date,time: Time) { }

scala> val dt = DateTime(Date(2011,5,27),Time(15,21,50))
scala> dt match { case DateTime(Date(2011,_),Time(h,m,50)) => println(h + ":" + m) }
15:21

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读