2013-06-15 16 views

Odpowiedz

11

ten wymaga użycia wielu list parametrów:

case class A(x: Int)(y: Int = x*2) 

Domyślne wartości może odnosić się tylko do parametrów w poprzednich list.

Uważaj jednak z klas przypadku, ponieważ ich równość bierze tylko pod uwagę pierwszą listę parametrów, zatem:

A(1)() == A(1)(3) // --> true!! 
+1

Dobra odpowiedź. To całkiem sporo, gdy używamy klas przypadków i nadal nie jest on poprawiony od wersji 2.11.6. –

+0

W rzeczywistości uważam za przydatną cechę, aby móc definiować parametry, które nie uczestniczą w równości i mieszaniu. –

6

Ponieważ poprosiłeś dla obejścia, jeśli nie jest to oczywiste, jak zachować caseness :

scala> :pa 
// Entering paste mode (ctrl-D to finish) 

case class Foo(x: Int, y: Int) 
object Foo { 
    def apply(x: Int): Foo = apply(x, 2*x) 
} 

// Exiting paste mode, now interpreting. 

defined class Foo 
defined object Foo 

scala> Foo(5,6) 
res45: Foo = Foo(5,6) 

scala> Foo(5) 
res46: Foo = Foo(5,10) 
+0

Uważam, że ta metoda jest bardziej użyteczna, ale daję odpowiedź 0 __ na akceptację, ponieważ wydaje się bardziej popularna. –

+0

W rzeczywistości, zielona kontrola ma oznaczać, co rozwiązało twój problem, jakkolwiek to zdefiniujesz. Ale przypuszczam, że rozwiązałeś swój problem kilka lat temu. –

+0

Tak, z perspektywy czasu, nie wiem, dlaczego zmieniłem zielone kontrole. –

Powiązane problemy