У меня есть классы классов, которые имеют метод tupled
, определенный в его компаньонном объекте. Как видно из приведенного ниже кода в сопутствующих объектах, это просто дублирование кода.Определить черту, которая будет расширена по классу case в 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
}
С другой вопрос (can a scala self type enforce a case class type), кажется, что мы не можем обеспечить соблюдение собственного типа признака быть случай класса.
Есть ли способ определить признак (скажем Tupled
), который может быть применен следующим образом?
// 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 {
}
В качестве примечания, 'fromTuple' может быть лучшим названием для этого метода, это правда, что вы кортежи' apply', но называя результат 'tupled' делает звук, как преобразование является _to_ кортежа вместо of_from_. –
Спасибо большое !!! – TheKojuEffect
@TravisBrown Как я могу достичь такого же эффекта с классами case из 1 параметра? – vicaba