J'ai certaines classes de cas qui ont une méthode tupled
définie dans son objet compagnon. Comme il peut être vu à partir du code ci-dessous dans les objets compagnons, il s'agit juste de la duplication de code.Définir un trait à étendre par classe de cas dans 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
}
D'une autre question (can a scala self type enforce a case class type), il semble que nous ne peut pas appliquer l'auto-type d'un trait à une classe de cas.
Existe-t-il un moyen de définir un trait (disons Tupled
) qui peut être appliqué comme suit?
// 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 {
}
En outre, 'fromTuple' pourrait être un meilleur nom pour cette méthode - il est vrai que vous êtes en train de taper' apply', mais appeler le résultat 'tupled' fait c'est comme si la conversion était _to_ un tuple de _from_. –
Merci beaucoup! – TheKojuEffect
@TravisBrown Comment puis-je obtenir le même effet avec des classes de cas de 1 paramètre? – vicaba