Sono abbastanza nuovo su Scala e ho una domanda sul modo migliore di copiare una classe di case preservando i dati che provengono dai tratti. Per esempio, diciamo che ho il seguente:Scala: copia di classi di casi con tratto
trait Auditing {
var createTime: Timestamp = new Timestamp(System.currentTimeMillis)
}
case class User(val userName: String, val email: String) extends Auditing
val user = User("Joe", "[email protected]")
poi voglio fare una nuova copia con un parametro modificato:
val user2 = user.copy(email = "[email protected]")
Ora, nell'esempio di cui sopra, la CreateTime proprietà non ottiene copiato perché non è definito nel costruttore della classe case User. Quindi la mia domanda è: assumendo che spostare createTime nel costruttore non sia un'opzione, qual è il modo migliore per ottenere una copia dell'oggetto User che includa il valore dal tratto?
sto usando Scala 2.9.1
Grazie in anticipo! Joe
non c'è molto opzioni di fronte a voi: o si sceglie di implementare manualmente un tale metodo che produrrà la copia che si desidera nella dichiarazione della classe 'user' caso o si utilizza Scala 2.10 macro dispongono per automatizzare questo. La seconda opzione sicuramente non sarà un compito facile per un principiante. –
@NikitaVolkov Se tu fossi disposto a fornire a me/noi un esempio di come lo faresti con i macro, sarebbe più che ottimo. –
@mhs Mi iscrivo al club. Sono una newbee in macro, ecco perché non l'ho postata come risposta. Ma [ecco come] (http://stackoverflow.com/a/10397595/485115) ho risolto un compito molto simile con la 'Toolbox' api. La risposta accettata è basata su macro, ma penso che non supporti l'ultima versione di Scala. –