Здравствуйте, nikov, Вы писали:
N>В чем разница между паттернами:
Кажется, я разобрался. В таком виде первый паттерн вообще делает не то, что ожидается. int здесь толкуется как имя переменной.
А вот если поставить вместо int опцию варианта, то, видимо, оба паттерна работают одинаково. Я прав?
Здравствуйте, nikov, Вы писали:
N>Кажется, я разобрался. В таком виде первый паттерн вообще делает не то, что ожидается. int здесь толкуется как имя переменной.
Да. N>А вот если поставить вместо int опцию варианта, то, видимо, оба паттерна работают одинаково. Я прав?
Нет.
// ok
| Some.Variant(2 as n) as something => ...
// error, Some.Variant(n) is not a legal type expression
| x is Some.Variant(n) => ...
Здравствуйте, nikov, Вы писали:
N>В чем разница между паттернами:
| int as x => ...
и
| x is int => ...
?
Вот об этом я и говорил когда речь шла о недопустимости использования типов в качетсве имен перменых.
is — это динамическая проверка типа.
as — это алис для паттерна. В дайнном случае паттерн это просто переменная. С ней сопоставляется всеп что угодно. Например, следующий код:
def a = "Вать машу!";
match (a)
{
| int as x => WriteLine(x);
| _ => ()
}
выведет в консоль "Вать машу!".
Я уже задолбался объяснять Кмилу что это грабли. Михаль в свое время согласился со мной что это грабли, но уже видимо забыл.
Короче надо дожимать ребят и или вообще запрещать создавать перменные с именами пересекающимися с типами (по-моему, лучший выход) или хотя бы запрещать это в алиасах вводимых через as. Любой C#-программист без проблем воспримит конструкцию "х as y" за приведение типов в стиле C#. Так что это серьезнешие грабли!
Наличие варнингов "a value bound in pattern int was never used" и "this match clause is unused" не может быть оправданием, так как они только введут в заблуждение неподготовленного программиста.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Короче надо дожимать ребят и или вообще запрещать создавать перменные с именами пересекающимися с типами (по-моему, лучший выход) или хотя бы запрещать это в алиасах вводимых через as. Любой C#-программист без проблем воспримит конструкцию "х as y" за приведение типов в стиле C#. Так что это серьезнешие грабли!
Я согласен, что это — проблема, и ее надо как-то решать.
Как минимум, желательно объявить алиасы простых типов (int, string) ключевыми словами, и запретить использовать их в качестве идентификаторов без префикса @. Тем более, что void уже себя так ведет.
Мне кажется, близкая тема (о завязанности семантики на регистр идентификаторов) поднята в http://nemerle.org/bugs/view.php?id=827.
Здравствуйте, nikov, Вы писали:
N>Здравствуйте, VladD2, Вы писали:
VD>>Короче надо дожимать ребят и или вообще запрещать создавать перменные с именами пересекающимися с типами (по-моему, лучший выход) или хотя бы запрещать это в алиасах вводимых через as. Любой C#-программист без проблем воспримит конструкцию "х as y" за приведение типов в стиле C#. Так что это серьезнешие грабли!
N>Я согласен, что это — проблема, и ее надо как-то решать. N>Как минимум, желательно объявить алиасы простых типов (int, string) ключевыми словами, и запретить использовать их в качестве идентификаторов без префикса @. Тем более, что void уже себя так ведет.
Согласен. Вот толко Камила надо в этом убедить. А мой английский не позволяет это следать. Я просто перенапрягаюсь и бросаю что либо доказывать (слишком много времени у меня занимает писать по англицки).
N>Мне кажется, близкая тема (о завязанности семантики на регистр идентификаторов) поднята в http://nemerle.org/bugs/view.php?id=827.
В данном случае это вроде как не напрягает. Лично я не сделал подобных ошибок не разу. Но возможно я довольно много писал на С++ и привык не допускать подобных ошибк.
Тогда уж хорошо бы подумать и о полно запрете на переопределение идентификаторов. Или введении для этого специльаного ключевого слова вроде redef или reuse. Ведь явное переопределение — это не страшно. Важно, что бы человек по ошибке этого не делел.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Согласен. Вот толко Камила надо в этом убедить. А мой английский не позволяет это следать. Я просто перенапрягаюсь и бросаю что либо доказывать (слишком много времени у меня занимает писать по англицки).
Я написал в конфу. Все желающие могут поддержать, высказать свои соображения.