[Новая фича] Переопределение автоматического конструктора
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.04.10 14:56
Оценка:
Все привет.

Реализовал следующую возможность.

Если мы имеем класс с автоматически создаваемым конструкторо (например, с помощью макроса Record) или вхождение варианта, то раньше нельзя было создать конструктор с той же сигнатурой. Это приводило к тому, что во вхождениях вариантов нельзя было изменить логику конструирования объекта. Теперь если добавить к рукописному конструктору модификатор "new" и у сгенерированного конструктора не будет такого же модификатора, то компилятор предпочтет рукописный конструктор (точнее конструктор помеченный модификатором new). Пример:
public variant X
{
  | A
    {
      x : int;
      
      // this replace autogenerated (by Record macro) ctor
      public new this(_x : int)
      {
        x = _x * 2;
      }
    }


Соответствующий тест: redefine-generated-ctor.n.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: [Новая фича] Переопределение автоматического конструкто
От: evilbeaver  
Дата: 19.04.10 17:45
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Все привет.


VD>Реализовал следующую возможность.


VD>Если мы имеем класс с автоматически создаваемым конструкторо (например, с помощью макроса Record) или вхождение варианта, то раньше нельзя было создать конструктор с той же сигнатурой. Это приводило к тому, что во вхождениях вариантов нельзя было изменить логику конструирования объекта. Теперь если добавить к рукописному конструктору модификатор "new" и у сгенерированного конструктора не будет такого же модификатора, то компилятор предпочтет рукописный конструктор (точнее конструктор помеченный модификатором new). Пример:

VD>
VD>public variant X
VD>{
VD>  | A
VD>    {
VD>      x : int;
      
VD>      // this replace autogenerated (by Record macro) ctor
VD>      public new this(_x : int)
VD>      {
VD>        x = _x * 2;
VD>      }
VD>    }
VD>


VD>Соответствующий тест: redefine-generated-ctor.n.


Вот за это я пожалуй скажу спасибо. Очень не хватало лично мне данной фичи для вариантов. А в какой сборке эта фича доступна?
Re[2]: [Новая фича] Переопределение автоматического констру
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.04.10 17:50
Оценка:
Здравствуйте, evilbeaver, Вы писали:

E>А в какой сборке эта фича доступна?


8776
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: [Новая фича] Переопределение автоматического конструкто
От: SergASh  
Дата: 21.04.10 09:01
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Все привет.


VD>Реализовал следующую возможность.


Круто
Два вопроса. 1. Мараторий на новые фичи отменен? 2. Это попадет в документацию? Догадаться самому, что такая фича имеется, будет непросто.
Re[2]: [Новая фича] Переопределение автоматического констру
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.04.10 17:37
Оценка:
Здравствуйте, SergASh, Вы писали:

SAS>Круто

SAS>Два вопроса. 1. Мараторий на новые фичи отменен?

Нет. Но если кто-то сам успеет до релиза все реализовать, протестировать, накатать тесты и закомитеть, то с ним никто бороться не будет.

Данная фича мне понадобилась при работе над самим компилятором. Дело в том, что очень сложно менять структуры данных в которые раскрываются квази-цитаты. Меняя описание для ClassMember.Property я понял, что данная фича сняла бы множество проблем. Я почесал репу и реализовал ее.

SAS>2. Это попадет в документацию?


Надо чтобы попало. С документацией у нас вообще все не здорово.

SAS>Догадаться самому, что такая фича имеется, будет непросто.


Зато есть форум на котором можно задать вопрос. Теперь о ней знаю не только я, так что всегда найдется тот кто сможет подскзать.

ЗЫ

Кстати, буду признателен если кто-то опишет эту возможность в вики.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.