100 votes

La surcharge de constructeur pour Scala le Cas de Classes?

En Scala 2.8 est-il un moyen de surcharger les constructeurs d'une classe de cas?

Si oui, s'il vous plaît mettez un extrait de l'expliquer, si non, veuillez expliquer pourquoi?

188voto

retronym Points 35066

La surcharge des constructeurs n'est pas spécial pour les classes de:

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

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

Cependant, vous pouvez aussi surcharger l' apply méthode dans le compagnon de l'objet, qui est appelée lorsque vous omettez new.

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

Foo(1, 2)
Foo(1)

En Scala 2.8, nommé par défaut et les paramètres peuvent souvent être utilisé à la place de la surcharge.

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

21voto

Lukas Rytz Points 931

vous pouvez définir une surcharge du constructeur de la manière habituelle, mais à s'en prévaloir, vous devez utiliser le "nouveau" mot clé.

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)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X