[Nemerle] catch
От: nikov США http://www.linkedin.com/in/nikov
Дата: 28.01.07 13:26
Оценка:
Почему в блоке catch я не могу использовать всю мощь pattern matching'а, например условие when?
Ведь это хорошо ложится на концепцию фильтров в дотнетовском SEH.

30.01.07 17:59: Перенесено модератором из 'Декларативное программирование' — IT
Re: [Nemerle] catch
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.01.07 15:20
Оценка:
Здравствуйте, nikov, Вы писали:

N>Почему в блоке catch я не могу использовать всю мощь pattern matching'а, например условие when?


Почему нелзя? Можно. Ты опять используешь старый компилятор. У меня следующий код:
try
{
  throw System.Exception("x");
}
catch
{
  | e when e.Message == "x" => WriteLine("OK");
  | _ => WriteLine("~");
}

выводит ОК.

N>Ведь это хорошо ложится на концепцию фильтров в дотнетовском SEH.


В дотнете свои средства работы с исключениями. То что они базируются на SEH под Виндовс еще не значит, что можно напрямую использовать SEH. К тому же то же Моно реализует исключения явно иначе. Ведь ему под Линуксом и т.п. надо работать.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: [Nemerle] catch
От: nikov США http://www.linkedin.com/in/nikov
Дата: 28.01.07 16:48
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Почему нелзя? Можно. Ты опять используешь старый компилятор. У меня следующий код:

VD>выводит ОК.

Нет, компилятор у меня теперь свежий.

Я хотел сделать нечто следующее:

using System;
using System.Console;

variant ProgramException : Exception {
    | Failure
    | Warning {
        severity : int
    }
}

try {
    throw ProgramException.Failure();
}
catch {
    | ProgramException.Failure // error : exception catch pattern must be in form of `| e is ExceptionType => handler' or`| e => handler' for System.Exception
    | ProgramException.Warning(severity) when severity > 10
        => WriteLine("Oops");
}
Re[3]: [Nemerle] catch
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.01.07 23:02
Оценка:
Здравствуйте, nikov, Вы писали:

N>Здравствуйте, VladD2, Вы писали:


VD>>Почему нелзя? Можно. Ты опять используешь старый компилятор. У меня следующий код:

VD>>выводит ОК.

N>Нет, компилятор у меня теперь свежий.


N>Я хотел сделать нечто следующее:


Так лучше не делать по причине совместимости с другими языками. Но зато можно пользоваться выражением where (если не ошибаюсь) и получать практически ту же функциональность для обычных классов.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.