match vs catch
От: _nn_ www.nemerleweb.com
Дата: 03.08.10 09:25
Оценка:
Корректный match:
def x = match (1)
{
  | i when i is int || i is object => 2
  | _ => 1
};


def x = match (1)
{
  | i is int | i is object => 2
  | _ => 1
};


Тут ошибка, видимо разрешено только обобщение типа:
def x = match (1)
{
  | i is int | i is double => 2
  | _ => 1
};


Убеждаемся что это так:
def x = match (1 : object)
{
  | i is ArgumentNullException | i is ArgumentException => 2
  | _ => 1
};


Теперь как обстоят дела в catch:
catch
{
  | e when e is ArgumentNullException || e is MethodAccessException =>
    Console.WriteLine("A");
}


А сократить уже нельзя даже при обобщении типа:
catch
{
  | e is ArgumentNullException | e is Exception =>
    Console.WriteLine("A");
}


Почему такое несоответсвие, хотя и там и там сопостовление с образцом ?
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: match vs catch
От: catbert  
Дата: 03.08.10 09:36
Оценка:
Здравствуйте, _nn_, Вы писали:

__>Почему такое несоответсвие, хотя и там и там сопостовление с образцом ?


Потому что там от сопоставления с образцом только синтаксис: MainParser.n
Re[2]: match vs catch
От: _nn_ www.nemerleweb.com
Дата: 03.08.10 09:54
Оценка:
Здравствуйте, catbert, Вы писали:

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


__>>Почему такое несоответствие, хотя и там и там сопоставление с образцом ?


C>Потому что там от сопоставления с образцом только синтаксис: MainParser.n


Было бы хорошо если бы синтаксис сохранялся.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[3]: match vs catch
От: catbert  
Дата: 04.08.10 06:23
Оценка:
Здравствуйте, _nn_, Вы писали:

__>Было бы хорошо если бы синтаксис сохранялся.


Может и было бы хорошо иметь полнофункциональное сопоставление с образцом, но код из блока catch транслируется в обработчики MSIL .catch, с которым задается только один тип исключения, по которому CLR проводит выбор исполняемого catch-блока.

Для реализации сопоставления с образцом надо использовать директивы .filter (в них можно поместить код, который выбирает, какой обработчик исключения исполняется). Но для этого следует прописать кодогенерацию match-а для директив .filter, что, мне кажется, нетривиально.

А толку от этого немного: все равно код catch { | SpecialEx | GeneralEx => blah } эквивалентен catch { | GeneralEx => blah }, а других фич match-а там и не выйдет использовать.
Re[4]: match vs catch
От: _nn_ www.nemerleweb.com
Дата: 04.08.10 17:42
Оценка:
Здравствуйте, catbert, Вы писали:

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


__>>Было бы хорошо если бы синтаксис сохранялся.


C>Может и было бы хорошо иметь полнофункциональное сопоставление с образцом, но код из блока catch транслируется в обработчики MSIL .catch, с которым задается только один тип исключения, по которому CLR проводит выбор исполняемого catch-блока.


C>Для реализации сопоставления с образцом надо использовать директивы .filter (в них можно поместить код, который выбирает, какой обработчик исключения исполняется). Но для этого следует прописать кодогенерацию match-а для директив .filter, что, мне кажется, нетривиально.


C>А толку от этого немного: все равно код catch { | SpecialEx | GeneralEx => blah } эквивалентен catch { | GeneralEx => blah }, а других фич match-а там и не выйдет использовать.


Ну разве что when можно как в VB
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[5]: match vs catch
От: catbert  
Дата: 05.08.10 07:20
Оценка:
Здравствуйте, _nn_, Вы писали:

__>Ну разве что when можно как в VB


when можно
Re: match vs catch
От: VladD2 Российская Империя www.nemerle.org
Дата: 09.08.10 03:22
Оценка:
Здравствуйте, _nn_, Вы писали:

__>Почему такое несоответсвие, хотя и там и там сопостовление с образцом ?


Это практический вопрос или теоретический? Ну, не разу в жизни не нужно было полиморфной обработки исключений. Их вообще лучше по меньше обрабатывать .

Если нужен круто паттерн-матчинг, то не грех в обработчике еще match добавить.

В общем, я бы забил на подобное усовершенствование. Разве что на 2.0 отложить.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: match vs catch
От: _nn_ www.nemerleweb.com
Дата: 09.08.10 07:18
Оценка:
Здравствуйте, VladD2, Вы писали:

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


__>>Почему такое несоответсвие, хотя и там и там сопостовление с образцом ?


VD>Это практический вопрос или теоретический? Ну, не разу в жизни не нужно было полиморфной обработки исключений. Их вообще лучше по меньше обрабатывать .

В данном случае теоретический.
Подумалось, раз синтаксис похож, то может можно использовать сопоставление и решил проверить.

VD>Если нужен круто паттерн-матчинг, то не грех в обработчике еще match добавить.

+1

VD>В общем, я бы забил на подобное усовершенствование. Разве что на 2.0 отложить.

+1
http://rsdn.nemerleweb.com
http://nemerleweb.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.