In Scala 2.8 esiste un modo per sovraccaricare i costruttori di una classe di casi?Sovraccaricatore per Classi Case di Scala?
Se sì, si prega di inserire uno snippet per spiegare, in caso contrario, per favore spiegare perché?
In Scala 2.8 esiste un modo per sovraccaricare i costruttori di una classe di casi?Sovraccaricatore per Classi Case di Scala?
Se sì, si prega di inserire uno snippet per spiegare, in caso contrario, per favore spiegare perché?
costruttori Sovraccarico non è speciale per le classi di casi:
case class Foo(bar: Int, baz: Int) {
def this(bar: Int) = this(bar, 0)
}
new Foo(1, 2)
new Foo(1)
Tuttavia, come si può sovraccaricare anche il metodo apply
nell'oggetto compagno, che viene chiamato quando si omette new
.
object Foo {
def apply(bar: Int) = new Foo(bar)
}
Foo(1, 2)
Foo(1)
In Scala 2.8, i parametri denominati e predefiniti possono essere spesso utilizzati al posto del sovraccarico.
case class Baz(bar: Int, baz: Int = 0)
new Baz(1)
Baz(1)
È possibile definire un costruttore sovraccarico nel solito modo, ma per invocarlo è necessario utilizzare la parola chiave "nuovo".
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)
Questo non è del tutto vero - è possibile dichiarare nell'oggetto compagna come normale –
Molto bello :) Ero alla ricerca di qualcosa di simile a valori di ripristino a Scala, è di nuovo da 2,8? Non lo sapevo :) – Felix
Sì, i parametri Named e Default sono nuovi in Scala 2.8. – retronym
Martin Odersky spiega perché i metodi di applicazione aggiuntivi non vengono aggiunti automaticamente: http://www.scala-lang.org/node/976 –