Осторожно, грабли
От: catbert  
Дата: 13.08.13 11:24
Оценка: 3 (1)
try
{
  // ...
}
catch
{
  | ArgumentException => Console.WriteLine("вы подумали что ловиться будет только ArgumentException, а на самом деле ловится все подряд");
  // хорошо что хоть варнинг есть, правда непонятный
}
Re: Осторожно, грабли
От: _NN_ www.nemerleweb.com
Дата: 13.08.13 12:02
Оценка:
Здравствуйте, catbert, Вы писали:

За что боролись на то и напоролись.
Надо придумать как правильно решить эту проблему, чтобы не было неоднозначностей.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Осторожно, грабли
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 13.08.13 14:28
Оценка: -1
Здравствуйте, catbert, Вы писали:

C>
C>try
C>{
C>  // ...
C>}
C>catch
C>{
C>  | ArgumentException => Console.WriteLine("вы подумали что ловиться будет только ArgumentException, а на самом деле ловится все подряд");
C>  // хорошо что хоть варнинг есть, правда непонятный
C>}
C>


Мне например неочеидно, почему надо думать, что ловиться будет только ArgumentException Вроде как очевидно, что должно ловиться всё подряд.
Re[2]: Осторожно, грабли
От: CodingUnit Россия  
Дата: 13.08.13 17:40
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>За что боролись на то и напоролись.

_NN>Надо придумать как правильно решить эту проблему, чтобы не было неоднозначностей.

Я думаю надо как в match сделать если хотим ловить тип то пишем с большой, если переменная то с маленькой, тогда неоднозначностей не будет. Если написал с маленькой значит должен использовать переменную, и выглядит по человечески, как в матче, если не использовал будет варнинг, а выражение типа ArgumentException считать проверкой ловли исключения типа только ArgumentException, вариант | _ is ArgumentException считать эквивалентным.
Re[3]: Осторожно, грабли
От: _NN_ www.nemerleweb.com
Дата: 13.08.13 18:20
Оценка:
Здравствуйте, CodingUnit, Вы писали:

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


_NN>>За что боролись на то и напоролись.

_NN>>Надо придумать как правильно решить эту проблему, чтобы не было неоднозначностей.

CU>Я думаю надо как в match сделать если хотим ловить тип то пишем с большой, если переменная то с маленькой, тогда неоднозначностей не будет. Если написал с маленькой значит должен использовать переменную, и выглядит по человечески, как в матче, если не использовал будет варнинг, а выражение типа ArgumentException считать проверкой ловли исключения типа только ArgumentException, вариант | _ is ArgumentException считать эквивалентным.


Тогда конр-вопрос.
Дан тип с маленькой буквы, и хотим переменную с большой.
Как это будет выглядеть ?
Предлагается такой вариант не поддерживать ?
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[4]: Осторожно, грабли
От: CodingUnit Россия  
Дата: 13.08.13 18:26
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Тогда конр-вопрос.

_NN>Дан тип с маленькой буквы, и хотим переменную с большой.
_NN>Как это будет выглядеть ?
_NN>Предлагается такой вариант не поддерживать ?

Также как с матчем, если хотим матчить тип с маленькой, то пишем
_ is small_type_name


переменные с большой нет смысла поддерживать, я не знаю кто использует это в матче, в крайнем случае можно так _ as A, это работает в матче, но портит представление кода большая буква, потому что они в основном используются для типов.
Re[4]: Осторожно, грабли
От: CodingUnit Россия  
Дата: 13.08.13 18:30
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Тогда конр-вопрос.

_NN>Дан тип с маленькой буквы, и хотим переменную с большой.
_NN>Как это будет выглядеть ?
_NN>Предлагается такой вариант не поддерживать ?

Главное в предложенном варианте что это уберет неоднозначность, и даст предсказуемое поведение | a — отлов всех типов в переменную если не используется варнинг, | A — отлов типа также как и _ is A. Таким образом, надо в компиляторе сделать поддержку | A как отлов исключений типа A, я думаю это можно сделать просто переписывая выражение с большой буквы | A в | _ is A, тогда грабли обойдем.
Re[5]: Осторожно, грабли
От: _NN_ www.nemerleweb.com
Дата: 13.08.13 18:30
Оценка:
Здравствуйте, CodingUnit, Вы писали:

CU>переменные с большой нет смысла поддерживать, я не знаю кто использует это в матче, в крайнем случае можно так _ as A, это работает в матче, но портит представление кода большая буква, потому что они в основном используются для типов.

Мало ли кто-то хочет.
Конвенция кода такая.

Итого:
1. Большая буква — всегда тип
2. Маленькая буква — всегда переменная
3. Гарантированно тип: _ is Type
4. Гарантированно переменная: _ as Var

В таком случае почему бы не считать ошибкой использование типов вместо переменной и наоборот в случае 1 и 2 ?
Зачем предупреждение ?
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[6]: Осторожно, грабли
От: CodingUnit Россия  
Дата: 13.08.13 18:37
Оценка:
Здравствуйте, _NN_, Вы писали:


_NN>Конвенция кода такая.


_NN>Итого:

_NN>1. Большая буква — всегда тип
_NN>2. Маленькая буква — всегда переменная
_NN>3. Гарантированно тип: _ is Type
_NN>4. Гарантированно переменная: _ as Var

_NN>В таком случае почему бы не считать ошибкой использование типов вместо переменной и наоборот в случае 1 и 2 ?

_NN>Зачем предупреждение ?

Конвенция кода на сегодняшний момент в матче именно такая, предупреждение если матчится переменная в пункте 2, как еще выяснить что пользователь хотел там тип? В пункте один естественно должно быть сообщение об ошибке если нет такого типа, аналогично применению _ is A. Во всех вариантах поведение как в матче мне нравится, это понятно, варнинг никогда не напрягал в матче в случае переменных, кто его знает что хотел пользователь сказать переменную или тип, матчится переменная и все и это будет сразу видно в студии с подчеркиванием, привыкнуть к этому проще всего, кто программирует обычные match конструкции. Меня наоборот всегда раздражало что синтаксис catch отличается и ограничен по сравнению с match.
Re[7]: Осторожно, грабли
От: _NN_ www.nemerleweb.com
Дата: 13.08.13 18:46
Оценка:
Здравствуйте, CodingUnit, Вы писали:

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



_NN>>Конвенция кода такая.


_NN>>Итого:

_NN>>1. Большая буква — всегда тип
_NN>>2. Маленькая буква — всегда переменная
_NN>>3. Гарантированно тип: _ is Type
_NN>>4. Гарантированно переменная: _ as Var

_NN>>В таком случае почему бы не считать ошибкой использование типов вместо переменной и наоборот в случае 1 и 2 ?

_NN>>Зачем предупреждение ?

CU>Конвенция кода на сегодняшний момент в матче именно такая, предупреждение если матчится переменная в пункте 2, как еще выяснить что пользователь хотел там тип? В пункте один естественно должно быть сообщение об ошибке если нет такого типа, аналогично применению _ is A. Во всех вариантах поведение как в матче мне нравится, это понятно, варнинг никогда не напрягал в матче в случае переменных, кто его знает что хотел пользователь сказать переменную или тип, матчится переменная и все и это будет сразу видно в студии с подчеркиванием, привыкнуть к этому проще всего, кто программирует обычные match конструкции. Меня наоборот всегда раздражало что синтаксис catch отличается и ограничен по сравнению с match.


Тогда на мой взгляд лучше давать по рукам изначально.

catch работает немного по другому.
Вопрос уже
Автор: _nn_
Дата: 03.08.10
поднимался.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[8]: Осторожно, грабли
От: CodingUnit Россия  
Дата: 13.08.13 18:50
Оценка:
Здравствуйте, _NN_, Вы писали:


_NN>Тогда на мой взгляд лучше давать по рукам изначально.


Хорошо, как ты собираешься отлавливать ошибочную ситуацию и бить по рукам?
Re[9]: Осторожно, грабли
От: _NN_ www.nemerleweb.com
Дата: 13.08.13 18:53
Оценка:
Здравствуйте, CodingUnit, Вы писали:

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



_NN>>Тогда на мой взгляд лучше давать по рукам изначально.


CU>Хорошо, как ты собираешься отлавливать ошибочную ситуацию и бить по рукам?


Также как и предупреждение выводить , только вместо предупреждение вывести ошибку
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: Осторожно, грабли
От: Don Reba Канада https://stackoverflow.com/users/49329/don-reba
Дата: 13.08.13 18:59
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Мне например неочеидно, почему надо думать, что ловиться будет только ArgumentException Вроде как очевидно, что должно ловиться всё подряд.


…даже не буду спрашивать. Потому что в аналогичном match(e) { ArgumentException => () } будет матчится только исключение соответствующего типа.
Ce n'est que pour vous dire ce que je vous dis.
Re[10]: Осторожно, грабли
От: CodingUnit Россия  
Дата: 13.08.13 18:59
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Также как и предупреждение выводить , только вместо предупреждение вывести ошибку


Ошибку что переменная неиспользуется? Не кажется это слишком?
Re[11]: Осторожно, грабли
От: _NN_ www.nemerleweb.com
Дата: 13.08.13 19:12
Оценка:
Здравствуйте, CodingUnit, Вы писали:

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


_NN>>Также как и предупреждение выводить , только вместо предупреждение вывести ошибку


CU>Ошибку что переменная неиспользуется? Не кажется это слишком?


Секунду , что-то я запутался.
С Большой буквы всегда тип , с маленькой всегда переменная, так ведь ?
Тогда неоднозначностей нет и никаких лишних предупреждений тоже нет.

Я поддерживаю такой вариант.
Устроим голосование ?
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[12]: Осторожно, грабли
От: CodingUnit Россия  
Дата: 13.08.13 19:20
Оценка: +1
Здравствуйте, _NN_, Вы писали:


_NN>Секунду , что-то я запутался.

_NN>С Большой буквы всегда тип , с маленькой всегда переменная, так ведь ?
_NN>Тогда неоднозначностей нет и никаких лишних предупреждений тоже нет.

_NN>Я поддерживаю такой вариант.

_NN>Устроим голосование ?

Неоднозначностей нет, нижний регистр переменная, верхний регистр тип, тогда в окружающем коде появляются соответствующие ошибки и предупреждения, которые уместны. Если пользователь ввел слово в нижнем регистре | a, но понимал это как тип, то соответствующее слово будет подчеркнуто поскольку он не будет использовать переменную. Если будет написано | A но интерпретируя что это должно матчить любое исключение в переменную A то получит ошибку что не найден соответствующий тип. Я думаю такое поведение предсказуемо и уже давно работает с матч конструкциями, уберет неоднозначность со типами исключений .net и сделает большую стройность в языке, catch будет больше походить на match. Я поддерживаю такой вариант.
Re[2]: Осторожно, грабли
От: catbert  
Дата: 15.08.13 12:43
Оценка: +1
Здравствуйте, _NN_, Вы писали:

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


_NN>За что боролись на то и напоролись.

_NN>Надо придумать как правильно решить эту проблему, чтобы не было неоднозначностей.

У Nemerle синтаксис catch-блока похож на match, но совершенно другой, его очевидно не сильно продумывали. По-хорошему нужно переписать там все, чтобы семантика match-а соблюдалась ближе. В конце концов, можно использовать CLR-овские guard-ы.
Re: Осторожно, грабли
От: CodingUnit Россия  
Дата: 08.09.13 17:11
Оценка: 13 (2)
Здравствуйте, catbert, Вы писали:

C>
C>try
C>{
C>  // ...
C>}
C>catch
C>{
C>  | ArgumentException => Console.WriteLine("вы подумали что ловиться будет только ArgumentException, а на самом деле ловится все подряд");
C>  // хорошо что хоть варнинг есть, правда непонятный
C>}
C>


Сделал пулл-реквест исправляющий ошибку, в соответствии с договоренностью в этой теме.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.