Развлекался я тут с макросами...
class LoopHelper
{
static ExitName : string = "_N_exit_";
public static MakeExitName(name : object) : string
{
| null => ExitName
| _ => ExitName + name.ToString()
}
}
macro MBreak (loopName)
syntax ("exit", Optional(loopName))
{
<[ $(PT.Name.Global (LoopHelper.MakeExitName(loopName)) : name) () ]>
}
macro @loop (body, cond, loopName)
syntax ("loop", Optional("[", loopName, "]"), "(", cond, ")", body)
{
def loop = Nemerle.Macros.Symbol (Util.tmpname ("loop_"));
<[
$(PT.Name.Global (LoopHelper.MakeExitName(loopName)) : name) :
{
def $(loop : name) () : void
{
when($cond)
{
$body;
$(loop : name) ();
}
}
$(loop : name) ();
}
]>
}
и использование
loop [my_super_puper_loop] (false)
{
loop (false)
{
when(false)
exit ;
when(false)
exit my_super_puper_loop;
}
}
И вот мне подумалось, а не добавить ли эту функциональность к стандартным for, foreach, while и к их break и continue?
Написанный код это не сломает.
Кто как думает?
ЗЫ Может уже пора форум по Немерле создать?
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
26.05.06 18:48: Перенесено модератором из 'Интеграция Nemerle и Visual Studio' — VladD2