У меня есть много подобных классов классов, которые означают разные вещи, но имеют тот же список аргументов.Преобразование одного класса case в другой, когда список аргументов один и тот же.
object User {
case class Create(userName:String, firstName: String, lastName: String)
case class Created(userName:String, firstName: String, lastName: String)
}
object Group {
case class Create(groupName:String, members: Int)
case class Created(groupName:String, members: Int)
}
Учитывая этот вид установки, я устал от методов написания, которые принимают аргумент типа Создает и возвращает аргумент типа Created. У меня есть множество тестовых примеров, которые делают именно такие вещи.
Я мог бы написать функцию для преобразования одного класса case в другой. Эта функция преобразует User.Create
в User.Created
def userCreated(create: User.Create) = User.Create.unapply(create).map((User.Created.apply _).tupled).getOrElse(sys.error(s"User creation failed: $create"))
мне пришлось написать еще одну такую функцию для группы. Я бы хотел, чтобы это была общая функция, которая принимает два типа классов case и объект одного класса case и преобразуется в другой. Что-то вроде,
def transform[A,B](a: A):B
Кроме того, эта функция не должна превзойти цель уменьшения шаблона. Пожалуйста, не стесняйтесь предлагать другую подпись для функции, если ее проще в использовании.
Ожидаете ли вы что-то вроде 'convert (a) .to [B]'? –
Важно ли, чтобы все эти парные классы имели имя create/created или ваше требование чисто, что они могут быть спарены и что одна функция преобразует первый класс любой такой пары во вторую? – itsbruce