129 votes

Surcharge de constructeur Scala ?

Comment fournissez-vous des constructeurs surchargés en Scala ?

181voto

Jon McAuliffe Points 1906

Il est important de mentionner explicitement que les constructeurs auxiliaire dans la Scala doit appeler soit réponse constructeur principal (comme landon9720), ou un autre constructeur auxiliaire de la même classe, leur première action. Ils ne peut pas simplement appeler constructeur de la superclasse explicitement ou implicitement que possible en Java. Cela garantit que le constructeur principal est le seul point d’entrée à la classe.

32voto

landon9720 Points 11241
 class Foo(x: Int, y: Int) {
     def this(x: Int) = this(x, 0) // default y parameter to 0
 }

15voto

Jörgen Lundberg Points 753

À partir de Scala 2.8.0 vous pouvez aussi avoir des valeurs par défaut pour les paramètres de constructeur et de la méthode. Comme ça

Paramètres avec valeurs par défaut doivent venir après celles avec aucune valeur par défaut dans la liste de paramètres.

9voto

flying sheep Points 1989

En regardant mon code, j'ai soudain réalisé que je ne sorte de surcharge de constructeur. Je me suis alors souvenu de cette question et revient à donner une autre réponse:

En Scala, vous ne pouvez pas surcharger les constructeurs, mais vous pouvez le faire avec les fonctions.

Aussi, nombreux sont ceux qui choisissent de faire de l' apply de la fonction d'un compagnon objet d'une usine pour la catégorie concernée.

Faire de cette classe abstraite et la surcharge de l' apply fonction à mettre en œuvre-instancier cette classe, vous avez votre surchargé "constructeur":

abstract class Expectation[T] extends BooleanStatement {
    val expected: Seq[T]
    …
}

object Expectation {
    def apply[T](expd:     T ): Expectation[T] = new Expectation[T] {val expected = List(expd)}
    def apply[T](expd: Seq[T]): Expectation[T] = new Expectation[T] {val expected =      expd }

    def main(args: Array[String]): Unit = {
        val expectTrueness = Expectation(true)
        …
    }
}

Notez que j'ai explicitement définir chaque apply de revenir Expectation[T], sinon il serait de retour à un canard tapé Expectation[T]{val expected: List[T]}.

1voto

asyncwait Points 1745

J’ai pensé que peut-être Les constructeurs Scala (2008-11-11) pourrait ajouter des informations supplémentaires.

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