gpt4 book ai didi

class - 如何对具有多个参数列表的类进行模式匹配?

转载 作者:行者123 更新时间:2023-12-03 12:37:37 25 4
gpt4 key购买 nike

考虑此类:

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类,则可以将unapply定义为所需的任何内容,因此这实际上取决于该类的实现者。默认情况下,没有取消应用,因此您只能在类型上进行匹配。

如果要使用精美的案例类功能,包括能够在所有事物上进行匹配和相等,但是要进行某种划分,则可以嵌套案例类:
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

关于class - 如何对具有多个参数列表的类进行模式匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6156656/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com