Dans Scala 2.8 existe-t-il un moyen de surcharger les constructeurs d'une classe de cas?Constructeur de surcharge pour les classes de cas de Scala?
Si oui, veuillez mettre un extrait pour expliquer, si non, s'il vous plaît expliquer pourquoi?
Dans Scala 2.8 existe-t-il un moyen de surcharger les constructeurs d'une classe de cas?Constructeur de surcharge pour les classes de cas de Scala?
Si oui, veuillez mettre un extrait pour expliquer, si non, s'il vous plaît expliquer pourquoi?
constructeurs ne sont pas particulièrement Surcharger pour les classes de cas:
case class Foo(bar: Int, baz: Int) {
def this(bar: Int) = this(bar, 0)
}
new Foo(1, 2)
new Foo(1)
Cependant, vous pouvez vous surcharger également la méthode apply
dans l'objet compagnon, qui est appelée lorsque vous omettez new
.
object Foo {
def apply(bar: Int) = new Foo(bar)
}
Foo(1, 2)
Foo(1)
Scala 2.8, du nom et des paramètres par défaut peuvent souvent être utilisées au lieu de surcharge.
case class Baz(bar: Int, baz: Int = 0)
new Baz(1)
Baz(1)
Vous pouvez définir un constructeur surchargé de la manière habituelle, mais pour l'invoquer, vous devez utiliser le mot-clé "new".
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)
Ce n'est pas strictement vrai - vous pouvez le déclarer dans l'objet compagnon comme –
normale Very nice :) Je cherchais quelque chose comme valeurs de repli dans scala, est-il nouveau de 2,8? Je ne savais pas :) – Felix
Oui, les paramètres Named et Default sont nouveaux dans Scala 2.8. – retronym
Martin Odersky explique pourquoi les méthodes add apply ne sont pas ajoutées automatiquement: http://www.scala-lang.org/node/976 –