Scala surcharge du constructeur?
Comment voulez-vous fournir des constructeurs surchargés en Scala?
Vous devez vous connecter pour publier un commentaire.
Comment voulez-vous fournir des constructeurs surchargés en Scala?
Vous devez vous connecter pour publier un commentaire.
Il vaut la peine de mentionner explicitement que les Auxiliaires des Constructeurs en Scala doit appeler le principal constructeur (comme dans landon9720 s) réponse, ou un autre auxiliaire constructeur de la même classe, comme première action. Ils ne peuvent pas simplement appeler le constructeur de la superclasse, explicitement ou implicitement, comme ils peuvent en Java. Cela garantit que le principal constructeur est le seul point d'entrée de la classe.
new Foo(x=2,z=4)
etnew Foo(z=5)
si vous modifiez votre première ligne declass Foo(x: Int = 0, y: Int = 0, z: String) {
new
mot-clé est nécessaire, même pour des classes de cas.Comme de la Scala de 2.8.0 vous pouvez également avoir des valeurs par défaut pour le constructeur et les paramètres de la méthode. Comme ce
Paramètres avec des valeurs par défaut doivent venir après celles qui ont pas de valeurs par défaut dans la liste des paramètres.
class Foo(val x:Int, y:Int=2*x)
ne fonctionne pas.new Foo(x=2,z=4)
imprimeFoo(2,0,4)
.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 des fonctions.
Aussi, beaucoup choisissent de faire de la
apply
la fonction d'un compagnon objet d'une usine pour la catégorie concernée.Faire de cette classe abstraite et une surcharge du
apply
fonction à mettre en œuvre-instancier cette classe, vous avez votre surchargé “constructeur”:Remarque que j'définir explicitement chaque
apply
de retourExpectation[T]
, sinon, il serait de retour à un canard tapéExpectation[T]{val expected: List[T]}
.J'ai pensé que peut-être Scala Constructeurs (2008-11-11) pourrait ajouter plus d'informations.
Essayer cette