Немного макросов-операторов на Nemerle
Feb. 27th, 2013 11:29 amБывает, ради эксперимента пишу какие-то макросы, чтобы разобраться что позволяет макро-подсистема Nemerle, а что - нет. Если будет получаться что-то забавное, стану выкладывать это сюда.
Расширяемые анонимные типы
По мотивам хотелок
metaclass. На сколько я понял, ему нужны анонимные типы, которые можно расширять, добавляя новые элементы, а также передавать за пределы той области видимости, в которой они были объявлены. В языке Nemerle нет анонимных типов, однако ими все пользуются, поскольку они реализованы через макросы.
В общий чертах, работает это так: макрос new по переданным параметрам генерирует генерик-класс с макро-атрибутом [Record] вида
Макрос [Record] создает конструктор с аргументами для всех полей, а потом вызов макроса переписывается в конструктор только что созданного класса.

( Read more... )
Расширяемые анонимные типы
По мотивам хотелок
![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
def obj = new(name = "anon", age = 10, created = DateTime.Now);
В общий чертах, работает это так: макрос new по переданным параметрам генерирует генерик-класс с макро-атрибутом [Record] вида
[Record] class AnonType[name, age, created] {
public name : name;
public age : age;
public created : created;
}
Макрос [Record] создает конструктор с аргументами для всех полей, а потом вызов макроса переписывается в конструктор только что созданного класса.

( Read more... )