Почему в блоке catch я не могу использовать всю мощь pattern matching'а, например условие when?
Ведь это хорошо ложится на концепцию фильтров в дотнетовском SEH.
30.01.07 17:59: Перенесено модератором из 'Декларативное программирование' — IT
Здравствуйте, 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>>
Здравствуйте, 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");
}
Здравствуйте, nikov, Вы писали:
N>Здравствуйте, VladD2, Вы писали:
VD>>Почему нелзя? Можно. Ты опять используешь старый компилятор. У меня следующий код:
VD>>выводит ОК.
N>Нет, компилятор у меня теперь свежий.
N>Я хотел сделать нечто следующее:
Так лучше не делать по причине совместимости с другими языками. Но зато можно пользоваться выражением where (если не ошибаюсь) и получать практически ту же функциональность для обычных классов.
... << RSDN@Home 1.2.0 alpha rev. 637>>