В работе, которую я делаю ежедневно на Java, я часто использую строителей для свободного интерфейса, например: new PizzaBuilder(Size.Large).onTopOf(Base.Cheesy).with(Ingredient.Ham).build();
Благодаря быстрому и грязному подходу Java каждый вызов метода мутирует экземпляр компоновщика и возвращает this
. Неизменно, он включает в себя больше типизации, клонирование строителя прежде, чем изменить его. Метод сборки в конечном итоге делает тяжелый подъем над состоянием строителя.
Какой хороший способ добиться того же в Scala?
Если бы я хотел убедиться, что onTopOf(base:Base)
был вызван только один раз, а затем можно было бы вызывать только with(ingredient:Ingredient)
и build():Pizza
, a-la - направленный конструктор, как бы я хотел приблизиться к этому?