Como você fornece construtores sobrecarregados no Scala?
135
Vale mencionar explicitamente que os Construtores Auxiliares em Scala devem chamar a resposta do construtor primário (como em landon9720), ou outro construtor auxiliar da mesma classe, como sua primeira ação. Eles não podem simplesmente chamar o construtor da superclasse, explícita ou implicitamente, como podem em Java. Isso garante que o construtor principal seja o único ponto de entrada na classe.
class Foo(x: Int, y: Int, z: String) {
// default y parameter to 0
def this(x: Int, z: String) = this(x, 0, z)
// default x & y parameters to 0
// calls previous auxiliary constructor which calls the primary constructor
def this(z: String) = this(0, z);
}
new Foo(x=2,z=4)
enew Foo(z=5)
se você mudar a sua primeira linha declass Foo(x: Int = 0, y: Int = 0, z: String) {
new
palavra-chave seja necessária mesmo para as classes de caso.fonte
A partir do Scala 2.8.0, você também pode ter valores padrão para os parâmetros do contratante e do método. Como isso
Parâmetros com valores padrão devem vir depois daqueles sem valores padrão na lista de parâmetros.
fonte
class Foo(val x:Int, y:Int=2*x)
não funciona.new Foo(x=2,z=4)
será impressoFoo(2,0,4)
.Ao olhar para o meu código, de repente percebi que sobrecarregava um construtor. Lembrei-me da pergunta e voltei para dar outra resposta:
No Scala, você não pode sobrecarregar construtores, mas pode fazer isso com funções.
Além disso, muitos optam por tornar a
apply
função de um objeto complementar uma fábrica para a respectiva classe.Tornando essa classe abstrata e sobrecarregando a
apply
função de implementar-instanciar essa classe, você tem seu “construtor” sobrecarregado:Observe que eu defino explicitamente cada um
apply
para retornarExpectation[T]
, caso contrário, ele retornaria um tipo de patoExpectation[T]{val expected: List[T]}
.fonte
Tente isto
fonte