Se voglio aggiungere un metodo a una classe in Scala, ho bisogno di fare qualcosa di simile:Capire perché "pimp my library" è stata definita in questo modo in Scala
class RichFoo(f: Foo) {
def newMethod = f.bar()
}
object RichFoo {
implicit def foo2Rich(f: Foo) = new RichFoo(f)
}
Poi f.newMethod
si tradurrà nella creazione di RichFoo
e chiama il suo metodo.
sto cercando di capire il motivo per cui non è stato definito in modo simile a Ruby:
override class Foo {
def newMethod = bar
}
Il compilatore può guardare questa definizione, e creare una classe FooOverride con metodo newMethod statico che riceve un parametro di tipo Foo e chiama il suo metodo bar. Questo è il modo in cui Scala implementa i tratti. Devo ancora importare il pacchetto che contiene l'override di Foo per usarlo.
Sembra implicare meno digitazione, non richiede di inventare nomi e prestazioni migliori (non chiamare un metodo e creare un oggetto). Qualunque cosa il metodo di conversione implicito può fare all'interno del metodo aggiuntivo.
Sono sicuro di aver perso qualcosa e vorrei avere un'idea di cosa.
non rubino davvero fuori eseguire Scala in questo caso, o stai speculando che un'implementazione open class può essere fatto veloce come un chiuso? –
Suggerisco una facciata che sembra stia riaprendo una classe, ma in realtà chiama solo metodi statici. Lo scala compilatore fa sempre cose del genere (i tratti sono compilati in un'interfaccia e una classe con metodi statici). Suppongo che sia meno codificante e più veloce rispetto all'attuale modo implicito di defs – IttayD