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

  • 回答 (2)
  • 关注 (0)
  • 查看 (36)

我有以下类:

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

怎么使用unapply方法,我想匹配以下内容:

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类,则可以将unapplication定义为任何您想要的东西,因此它实际上取决于类的实现者。默认情况下,不存在不应用,因此只能在类型上匹配。

如果您想要使用case类特性:

case class Time(hour: Int, minute: Int, second: Int) { }
case class Date(year: Int, month: 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
未觉累不许说我笑点低!回答于

作为代数数据类型,甚至支持多参数列表。在生产代码中,这个工具通常只用于提供隐式参数,您很自然不希望进行模式匹配。

所属标签

可能回答问题的人

  • 天使的炫翼

    15 粉丝531 提问21 回答
  • 富有想象力的人

    2 粉丝0 提问20 回答
  • 腾讯云-ahqzhang

    0 粉丝0 提问19 回答
  • 发条丶魔灵1

    6 粉丝525 提问18 回答

扫码关注云+社区

领取腾讯云代金券