#scala #shapeless
#scala #бесформенный
Вопрос:
фрагменты кода упрощены, выбраны для целей этого сообщения.
case class Person(firstName:String,lstName:String)
Этот класс person использовался повсеместно в кодовой базе. Теперь более поздние требования изменились и решили добавить phoneNumber
в класс person case
например
case class Person(firstName:String,lstName:String,phoneNumber:String)
опять же, примеры в сообщении чрезвычайно упрощены. На самом деле происходят более интересные вещи. Обратите внимание, что phoneNumber
это Option
не обязательное поле. Обычно нужно пойти и обновить весь код, использующий Person
class, для обслуживания нового поля lastName
. что довольно утомительно, когда у вас есть 100 ссылок на него.
Может ли shapeless помочь в создании более гибкого HList
класса get go vs case?
Ответ №1:
Самый простой способ сделать это — предоставить значение по умолчанию для phoneNumber
:
case class Person(firstName: String, lastName: String, phoneNumber: String = "")
В качестве альтернативы вы можете создать сопутствующий объект и реализовать apply()
метод для обоих случаев, то есть с и без phoneNumber
. Если вы решите использовать этот подход и используете класс case в сопоставлениях с образцом, вы также можете захотеть реализовать соответствующие unapply()
методы.
Комментарии:
1. Вам также может потребоваться создать
unapply()
методы, если вы не хотите нарушать соответствие шаблону