Frage

In Scala 2.8 ist es eine Möglichkeit, Konstrukteuren einer Fallklasse zu überlasten?

Wenn ja, bitte einen Ausschnitt setzen zu erklären, wenn nicht, bitte erklären, warum?

War es hilfreich?

Lösung

Konstrukteure Überlastung ist nicht speziell für Fallklassen:

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

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

Sie können aber auch gerne die apply Methode in dem Begleitobjekt überlasten, die aufgerufen wird, wenn Sie new weglassen.

object Foo {
  def apply(bar: Int) = new Foo(bar)
}

Foo(1, 2)
Foo(1)

In Scala 2.8, mit dem Namen und Standardparameter können oft statt Überlastung verwendet werden.

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

Andere Tipps

Sie können einen überladenen Konstruktor die übliche Art und Weise definieren, aber es aufzurufen Sie das „neue“ Schlüsselwort 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)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top