考虑这个类:如何模式匹配具有多个参数列表的类?
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))
但那真的没用。
多个参数列表很好,因为您可以有多个var参数列表。 – 2015-05-17 23:52:21
也许这是一个有点人为的例子,但如果你可以说'case class MyCase [A <:WithBar](a:A)(b:A#Bar)'并且获得所有“漂亮功能”将有可能创建新的实例,如'val x = MyCase(FooWithBar(...))(Bar(...))',而不需要对'A'进行类型注释。使用'MyCase [A <:WithBar](a:A,b:A#Bar)“等签名,您必须使用val x = MyCase [FooWithBar](FooWithBar(...),Bar(...)实例化。 。))',因为类型推断在与'A'类型的参数相同的参数列表中指定时不适用于'A#Bar'。 – falconepl 2015-08-20 07:45:11
避免案件类诱惑的另一个原因。他们不能很好地使用该语言的许多高级功能(或概念)。 – matanster 2016-04-20 10:47:19