Требуется сгенерировать статический метод, который возвращает объект типа, с которым работает макрос. Вопрос: как это лучше сделать. Вот код на котором я остановился (здесь выполняется десериализация полей из BinaryReader):
Здравствуйте, Dufrenite, Вы писали:
D>Вопрос: как сделать, чтобы в качестве возвращаемого значения был Класс1, и в конце вызывался передаваемый конструктор?
Если класс помечен мета-атрибутом Record, то конечно можно сделать унивирсальный макрос, а так... даже не ясно как действовать. Конструкторов может быть более одного. Причем ни один из конструторов может не заполнять все поля. И еще... Как обеспечить соответствие между порядком/значением параметров конструктора и порядком сериализации полей?
В общем, мне кажется, что у тебя не продумана сама иделогия. Или ты ее не полностью раскрыл. Технических же проблем в твоем изложении тоже вроде как не видно. Так что на что отвечать не ясно. Ты бы сформулировал свои воросы более четко.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Ты бы сформулировал свои воросы более четко.
Окей, действительно поторопился. Короче, проблема в том, что я ещё до конца не разобрался в том, как связать макро-синтаксис Nemerle и структуры данных компилятора.
Проблема в следующем: надо сгенерировать метод в котором вызывается конструктор класса. Причём этот конструктор я генерирую в том же макросе. Я просто хочу понять — как мне сгенерировать вызов этого самого конструктора? Какой тип мне для этого нужно использовать ClassMember.Function или IMethod? И как это записать?
Здравствуйте, Dufrenite, Вы писали:
D>Я просто хочу понять — как мне сгенерировать вызов этого самого конструктора? Какой тип мне для этого нужно использовать ClassMember.Function или IMethod? И как это записать?
Вызов можно сгенерировать просто в квази-цитировании... как-то так:
<[ (nameOfType : name)() ]>
Или я чего-то непонимаю?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
D>с сообщением об ошибке: D>Error: parse error near identifier 'Класс1': unexpected token after ellipsis expression
А что понимается под "загрузки"? Если это попытка задать пространство имен, то так нельзя. Тут недавно обсуждался вопрос "как засунуть класс в нужное пространство имен". Поищи... если тебе именно это нужно.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>А что понимается под "загрузки"?
Загрузки, это последовательность операторов десериализации. Что то типа:
def _поле1 = reader.ReadInt32();
Получается, что одной инструкцией я не могу разыменовать список операторов и вызов конструктора. Приходится генерировать отдельный оператор для вызова конструктора и прицеплять его к списку операторов десериализации, тогда всё срабатывает.
Здравствуйте, Dufrenite, Вы писали:
D>Получается, что одной инструкцией я не могу разыменовать список операторов и вызов конструктора. Приходится генерировать отдельный оператор для вызова конструктора и прицеплять его к списку операторов десериализации, тогда всё срабатывает.
А, тогда все просто. Проблема в том как парсится цитирование, у ".." видимо "приоритет" слишком низкий.
Так что пишем например так:
Здравствуйте, Иванков Дмитрий, Вы писали:
ИД>А, тогда все просто. Проблема в том как парсится цитирование, у ".." видимо "приоритет" слишком низкий. ИД>Так что пишем например так: ИД>
Здравствуйте, Dufrenite, Вы писали:
D>Здравствуйте, Иванков Дмитрий, Вы писали:
ИД>>А, тогда все просто. Проблема в том как парсится цитирование, у ".." видимо "приоритет" слишком низкий. ИД>>Так что пишем например так: ИД>>
Здравствуйте, Иванков Дмитрий, Вы писали:
ИД>А, тогда все просто. Проблема в том как парсится цитирование, у ".." видимо "приоритет" слишком низкий. ИД>Так что пишем например так: ИД>
Все сложнее. Разименование .. работает только в скобках. Причем в зависимости от типа скобок оно работает по разному. Так что в этом конкретном случае надо ввести слишние фигурные скобки: