Ho alcune classi di casi che hanno un metodo tupled
definito nell'oggetto associato. Come si può vedere dal codice sottostante negli oggetti associati, è solo la duplicazione del codice.Definire un tratto da estendere per classe del caso in scala
case class Book(id: Int, isbn: String, name: String)
object Book {
def tupled = (Book.apply _).tupled // Duplication
}
case class Author(id: Int, name: String)
object Author {
def tupled = (Author.apply _).tupled // Duplication
}
Da un'altra domanda (can a scala self type enforce a case class type), sembra che non siamo in grado di far rispettare l'auto-tipo di un tratto di essere una classe case.
C'è un modo per definire un tratto (ad esempio Tupled
) che può essere applicato come segue?
// What would be value of ???
trait Tupled {
self: ??? =>
def tupled = (self.apply _).tupled
}
// Such that I can replace tupled definition with Trait
object Book extends Tupled {
}
Come nota a margine, 'fromTuple' potrebbe essere un nome migliore per questo metodo-è vero che stai tupendo 'apply', ma chiamare il risultato' fa tupla' suona come se la conversione fosse _ a_ una tupla di _from_. –
Grazie mille !!! – TheKojuEffect
@TravisBrown Come posso ottenere lo stesso effetto con le classi case di 1 parametro? – vicaba