Идея макроса
От: catbert  
Дата: 27.09.13 19:42
Оценка:
Когда пишешь иммутабельные классы, особенно Record-ы, часто возникает потребность добавить метод который возвращает копию this, но с одним свойством измененным.

Даже в микрософте это поняли, когда разрабатывали Immutable Collections.

Заметна тенденция для каждого свойства такого класса писать специальный метод With..., который так и делает:


[Record]
class MyData
{
  [Accessor] _a : A;
  [Accessor] _b : B;
  [Accessor] _c : C;

  public WithA(newA : A) : MyData
  {
    MyData(newA, this.B, this.C)
  }

  public WithB(newB : B) : MyData
  {
    MyData(this.A, newB, this.C)
  }

  public WithC(newC : C) : MyData
  {
    MyData(this.A, this.B, newC)
  }
}


Писать все это влом, конечно же. В связи с чем вопросы.

Что вы обычно делаете в такой ситуаци? Насколько было бы круто написать макрос GenerateUpdaters, который в Record-ах для каждого поля мог бы таких методов нагенерить? Достоин ли он стандартной библиотеки?

Спасибо за внимание.
http://nemerle.org/banners/?t=%20catbert%20
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.