Rozważmy następujący Scala klasę obudowy:Jak wzorzec pasuje do dużych klas przypadków Scala?
case class WideLoad(a: String, b: Int, c: Float, d: ActorRef, e: Date)
dopasowanie Wzór pozwala mi wydobyć jedno pole i wyrzucić innych, tak jak poniżej:
someVal match {
case WideLoad(_, _, _, d, _) => d ! SomeMessage(...)
}
Co chciałbym zrobić, a co bardziej istotne, gdy klasa case ma ~ 20 pól nieparzystych, jest wyodrębnianie tylko kilku wartości w sposób, który nie wymaga wpisywania WideLoad(_, _, _, _, _, some, _, _, _, thing, _, _, interesting)
.
miałem nadzieję, że może pomóc args nazwane tutaj, chociaż następującej składni nie działa:
someVal match {
case WideLoad(d = dActor) => dActor ! SomeMessage(...)
// ^---------- does not compile
}
Czy jest jakaś nadzieja tutaj, albo ja zatrzymany wpisywanie się wiele, wiele _, _, _, _
?
EDIT: Rozumiem, że mogę zrobić case wl @ WideLoad(...whatever...) => wl.d
, ale wciąż zastanawiam się, czy nie ma nawet terser składnia, że robi to, co trzeba bez konieczności stosowania dodatkowego val
.
nawet z 4 lub 5 pól, wszystkie podkreślenia sprawiają, że bardzo trudne do odczytania. Składnia nazwanego parametru znacznie poprawiłaby czytelność, ale o ile wiem, nic takiego jeszcze nie istnieje. –
Miałem wrażenie, że długie listy parametrów są czymś, czego należy unikać. –
Ty miałeś na myśli sprawę WideLoad (d == dActor) –