programar - scala introduccion
¿Constructor de sobrecarga para las clases de casos de Scala? (2)
En Scala 2.8, ¿hay alguna manera de sobrecargar a los constructores de una clase de caso?
En caso afirmativo, por favor ponga un fragmento para explicar, si no, ¿por qué?
Los constructores de sobrecarga no son especiales para las clases de casos:
case class Foo(bar: Int, baz: Int) {
def this(bar: Int) = this(bar, 0)
}
new Foo(1, 2)
new Foo(1)
Sin embargo, es posible que también desee sobrecargar el método de apply
en el objeto complementario, que se invoca cuando se omite el new
.
object Foo {
def apply(bar: Int) = new Foo(bar)
}
Foo(1, 2)
Foo(1)
En Scala 2.8, los parámetros nombrados y predeterminados a menudo se pueden usar en lugar de sobrecargar.
case class Baz(bar: Int, baz: Int = 0)
new Baz(1)
Baz(1)
Puede definir un constructor sobrecargado de la manera habitual, pero para invocarlo debe utilizar la palabra clave "nueva".
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)