Considere esta clase:¿Cómo se empareja una clase con varias listas de argumentos?
class DateTime(year: Int, month: Int, day: Int)(hour: Int, minute: Int, second: Int)
¿cómo la mirada unapply
método similar, si me gustaría hacer coincidir contra algo como:
dt match {
case DateTime(2012, 12, 12)(12, _, _) => // December 12th 2012, 12 o'clock
/* ... */
}
He intentado esto:
def unapply(dt: DateTime) =
Some((dt.year, dt.month, dt.day),(dt.hour, dt.minute, dt.second))
Pero eso realmente no funcionó.
Las listas de parámetros múltiples son agradables porque puede tener múltiples listas de var args. –
Quizás sea un ejemplo poco artificial, pero si pudiera decir 'clase de caso MyCase [A <: WithBar] (a: A) (b: A # Bar)' y obtener todas las "funciones ingeniosas" de la caja, entonces Sería posible crear nuevas instancias como 'val x = MyCase (FooWithBar (...)) (Bar (...))', sin anotación de tipo para 'A'. Con una firma como 'MyCase [A <: WithBar] (a: A, b: A # Bar)', tiene que instanciar con 'val x = MyCase [FooWithBar] (FooWithBar (...), Bar (.. .)) ', porque la inferencia de tipo no funcionaría para' A # Bar' cuando se especifica en la misma lista de parámetros como parámetro de tipo 'A'. – falconepl
Otra razón para evitar la tentación de clase de caso. No funcionan bien con muchas características avanzadas (o conceptos) del lenguaje. – matanster