En Scala 2.8 ¿hay alguna manera de sobrecargar a los constructores de una clase de caso?¿Constructor de sobrecarga para las clases de casos de Scala?
En caso afirmativo, ponga un fragmento para explicar, de lo contrario, explique por qué?
En Scala 2.8 ¿hay alguna manera de sobrecargar a los constructores de una clase de caso?¿Constructor de sobrecarga para las clases de casos de Scala?
En caso afirmativo, ponga un fragmento para explicar, de lo contrario, explique por qué?
constructores La sobrecarga no es especial 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, puede que quiera sobrecargar también el método apply
en el objeto acompañante, que se llama cuando se omite new
.
object Foo {
def apply(bar: Int) = new Foo(bar)
}
Foo(1, 2)
Foo(1)
En Scala 2.8, de nombre y los parámetros por defecto a menudo se puede utilizar en lugar de la sobrecarga.
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)
Eso no es del todo cierto - se puede declarar que en el objeto acompañante como –
muy agradable :) normal, yo estaba buscando algo así como valores de retorno en Scala, que es nueva de 2,8? No sabía :) – Felix
Sí, los parámetros Nombre y Por defecto son nuevos en Scala 2.8. – retronym
Martin Odersky explica por qué los métodos adicionales de aplicación no se agregan automáticamente: http://www.scala-lang.org/node/976 –