Об этом говорится в an interesting post over here, касающемся сквозного потока управления.Исключения для управления потоком
Ну, в последнее время я столкнулся с интересной проблемой. Генерация n-го значения в потенциально (практически) бесконечной рекурсивной последовательности. Этот конкретный алгоритм будет находиться по меньшей мере в 10-15 ссылках на стопки в той точке, в которой он преуспевает. Моя первая мысль была бросить SuccessException, который выглядел что-то вроде этого (C#):
class SuccessException : Exception
{
public string Value
{ get; set; }
public SuccessException(string value)
: base()
{
Value = value;
}
}
Затем сделать что-то вроде этого:
try
{
Walk_r(tree);
}
catch (SuccessException ex)
{
result = ex.Value;
}
Тогда мои мысли блуждали назад здесь, где я слышал над и никогда не использовать Исключения для управления потоком. Есть ли оправдание? И как бы вы структурировали нечто подобное, если бы вы его реализовали?
По сравнению с накладными расходами для определения значения успеха на каждом уровне и выхода из 10+ ссылок на стопки? Что касается использования, это персональный проект, а не то, что я предполагаю. – 2008-10-06 14:24:22
Если у вас более 10 ссылок на стопку и глубокая обработка ошибок, инфраструктура должна в любом случае сделать кучу дополнительной обработки. Если вы настроите рекурсивные вызовы для возврата успешного значения, это не должно быть проблемой. – 2008-10-06 14:27:23
Достаточно. Другая половина вопроса заключалась в том, как я мог бы структурировать это по-другому. Возможно, как «bool Walk_r (дерево объектов, результат строки)»? – 2008-10-06 14:29:45