Выйти из двух циклов сразу.
От: WolfHound  
Дата: 26.05.06 13:57
Оценка:
Развлекался я тут с макросами...
    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
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.