In Scala 2.8 gibt es eine Möglichkeit, Konstruktoren einer Fallklasse zu überlasten?Überladen Konstruktor für Scala Case Classes?
Wenn ja, bitte ein Schnipsel zu erklären, wenn nicht, bitte erklären, warum?
In Scala 2.8 gibt es eine Möglichkeit, Konstruktoren einer Fallklasse zu überlasten?Überladen Konstruktor für Scala Case Classes?
Wenn ja, bitte ein Schnipsel zu erklären, wenn nicht, bitte erklären, warum?
Ü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)
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)
Das ist nicht ganz richtig ist - Sie können es in dem Begleitobjekt als normal –
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
Ja, benannt und Standard-Parameter sind neu in Scala 2.8. – retronym
Martin Odersky erklärt, warum die zusätzlichen Methoden nicht automatisch hinzugefügt werden: http://www.scala-lang.org/node/976 –