2010-03-08 9 views

Antwort

151

Überlastung Bauer ist für Fallklassen nicht speziell:

case class Foo(bar: Int, baz: Int) { 
    def this(bar: Int) = this(bar, 0) 
} 

new Foo(1, 2) 
new Foo(1) 

jedoch mögen Sie können auch die apply Methode im Begleitobjekt zu überlasten, die aufgerufen wird, wenn Sie new weglassen.

In Scala 2.8 können häufig benannte und default-Parameter anstelle von Überladung verwendet werden.

case class Baz(bar: Int, baz: Int = 0) 
new Baz(1) 
Baz(1) 
+0

Sehr schön :) erklären kann ich für so etwas wie Fehlerwerte in scala suchen wurde, ist es von 2,8 neu? Ich wusste es nicht :) – Felix

+0

Ja, benannt und Standard-Parameter sind neu in Scala 2.8. – retronym

+7

Martin Odersky erklärt, warum die zusätzlichen Methoden nicht automatisch hinzugefügt werden: http://www.scala-lang.org/node/976 –

17

Sie können einen überladenen Konstruktor auf die übliche Weise definieren, aber um ihn aufzurufen, müssen Sie das Schlüsselwort "new" verwenden.

scala> case class A(i: Int) { def this(s: String) = this(s.toInt) } 
defined class A 

scala> A(1) 
res0: A = A(1) 

scala> A("2") 
<console>:8: error: type mismatch; 
found : java.lang.String("2") 
required: Int 
     A("2") 
     ^

scala> new A("2") 
res2: A = A(2) 
+2

Das ist nicht ganz richtig ist - Sie können es in dem Begleitobjekt als normal –