Nemerle Проблема с эвентами в макросах
От: chudo19  
Дата: 18.09.06 12:41
Оценка:
Кто нибудь пытался декларировать эвенты в макросах ?
То ли баг то ли еще что , но не хочет декларировть эвенты с одним и тем же типом.
даже если add / remove декларировать в ручную
Как мне кажется изза того что опускается имя эвента

ошибка:
redefinition of method TestClass.add_(value : EventType)
redefinition of method TestClass.remove_(value : EventType)

...

в обычном коде он декларирует
TestClass.add_EventName(value : EventType)
TestClass.remove_EventName(value : EventType)

30.01.07 18:16: Перенесено модератором из 'Декларативное программирование' — IT
Re: Nemerle Проблема с эвентами в макросах
От: chudo19  
Дата: 18.09.06 13:25
Оценка:
Сам же и отвечу.
Обошел проблему определив в ручную add remove для эвента
и перезаписав имена :

def ev = <[ ... ]>
ev.add.name=Splicable.Name(Name("add_"+eventName));
ev.remove.name=Splicable.Name(Name("remove_"+eventName));
Re: Nemerle Проблема с эвентами в макросах
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.09.06 21:04
Оценка:
Здравствуйте, chudo19, Вы писали:

Покажи полный код макроса.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Nemerle Проблема с эвентами в макросах
От: chudo19  
Дата: 19.09.06 10:39
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Покажи полный код макроса.


Изначальный код показать не могу уже,
показываю к чему пришел.

//Cannot declare simple event, fixing names will be harder.
//We will declare custom event add/remove:

def e = Splicable.Name(eventRef.name);
def ev = <[ decl: 
     public event   $(e):DelegateType  {
     add
     {                             
         $(("_"+eventName):dyn) = Delegate.Combine($(("_"+eventName):dyn), value):>DelegateType ]) ;      
     }
     remove
     {
         $(("_"+eventName):dyn) =  Delegate.Remove($(("_"+eventName):dyn) , value):>DelegateType ]) ;
     }
    }
    ]>;
    

//HERE GOES FIXUP PREVENTING EMPTY NAMES
ev.add.name=Splicable.Name(Name("add_"+eventName));                
ev.remove.name=Splicable.Name(Name("remove_"+eventName));
                
t.Define(ev);
t.Define(<[ decl:mutable  $(("_"+eventName):dyn):DelegateType  ]>)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.