2013-02-25 9 views
7

sto cercando di fare qualcosa di simile:Creare tratto comune per tutte le classi di casi di supporto copia (id = NEWID) Metodo

trait IdentifiableModel[T] { 
    self: { def copy(id: ObjectId): T } => 

    val id: ObjectId 
} 

ho trovato alcune altre questioni correlate che cercano di fare cose simili, ma hanno in realtà non ha risposto a questa domanda. Nel mio caso, sto provando a copiare le sottoclassi case class di IdentifiableModel che condividono tutti un valore id

+0

Io sono di mentalità aperta a qualsiasi soluzione, credo che potrebbe essere possibile utilizzare le macro di destra? –

+0

Che cosa vuoi esattamente raggiungere? Dimmi se ho ragione: hai un set di case case con un unico campo 'id' e vuoi essere in grado di chiamare il metodo' copy' generato automaticamente in modo polimorfico (cioè, attraverso la loro classe base comune 'IdentifiableModel') ? –

+0

Questo potrebbe essere ottenuto mediante l'uso della macro implicita, ovvero avendo una conversione implicita da un'istanza di tipo 'T' del caso con un campo' id: ObjectId' in un 'IdentifiableModel [T] {def copy (id: ObjectId): T } '. In scala 2.10.1, a causa di un bug nelle macro implicite, (https://issues.scala-lang.org/browse/SI-5923), dovrai usare un trucco con tipi esistenziali, a meno che tu non possa aspettare per 2.10.2, sembra. Sarei interessato a saperne di più sul tuo caso d'uso completo però, per verificare che funzioni come menzionato sopra. – Leo

risposta

Problemi correlati