This is an experimental language feature that has not yet been vetted by the C# language design group. The prototype is intended to help prepare for such a discussion.
Здравствуйте, Qodomoc, Вы писали:
Q>Т.е. может еще 100 раз поменяться?
Да хоть 1000, главное что они начали уже что-то делать в этом направлении, а не рассказывать, что PM — это не OOP.
Здравствуйте, Gollum, Вы писали:
G>Всего-то прошло 8 лет. Поздравляем. Правда драфт уродский конечно, но раз уж начали делать, сделают нормально
Помнишь, года 3 или 4 назад Мэдс говорил, что PM будет в C# 7.0?
Мужик походу держит слово — уважуха. ))
I noticed in the switch proposal "The order in which patterns are matched is not defined." It would be useful if the order were defined (as in F#) so that we could write more precise patterns before more general patterns:
// assume Cat derives from Animal
switch (obj) {
case Cat("Slats"): ...
case Cat(var name): ...
case Animal(var species): ...
}
Lack of defined ordering would require me to write the Cat logic within the Animal case, as I couldn't be sure that the Cat cases would be checked first. It would also create versioning woes if I got lucky initially, then took a service pack of the framework which subtly changed the compilation strategy in a way which resulted in a different order of matching.
nmgafter
Developer
Today at 1:50 AM
itowlson wrote:
>>>>I noticed in the switch proposal "The order in which patterns are matched is not defined." It would be useful if the order were defined (as in F#) so that we could write more precise patterns before more general patterns:
The semantics of the switch statement is that the first matched pattern is the one selected. What is not specified is the order in which the match operators are executed.
Здравствуйте, IB, Вы писали:
G>>Всего-то прошло 8 лет. Поздравляем. Правда драфт уродский конечно, но раз уж начали делать, сделают нормально IB>Помнишь, года 3 или 4 назад Мэдс говорил, что PM будет в C# 7.0?
ЕМНИП 8.0
... << RSDN@Home 1.2.0 alpha 5 rev. 100 on Windows 8 6.2.9200.0>>
Здравствуйте, IB, Вы писали:
Q>>Т.е. может еще 100 раз поменяться? IB>Да хоть 1000, главное что они начали уже что-то делать в этом направлении, а не рассказывать, что PM — это не OOP.
Как и говорили большевики влады 8 лет назад, МС созреет лет через 10. Ну, чё? Они превзашли сами себя и созрели аж на 2 года раньше. Хотя еще два года будут согласовывать и отлаживать.
Реализация то экспериментальная есть? Или только драфт?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Сходу нашел косяк. Для связывания переменных нужно использовать не var, а let, чтобы не делать переменные изменяемыми. Или будет не ясно как оно работает. Ведь по идее переменная связывается с частью объекта, а значит изменив переменную должна меняться и соответствующая часть объекта.
Еще switch и if — это стейтменты, что не всегда удобно. Нужно заводить аналогичные выражения, чтобы их можно было использовать внутри выражений и рекурсивно.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, IB, Вы писали:
IB>>Draft spec for records and pattern-matching in C# IB>>https://roslyn.codeplex.com/discussions/560339
VD>Сходу нашел косяк. Для связывания переменных нужно использовать не var, а let, чтобы не делать переменные изменяемыми. Или будет не ясно как оно работает. Ведь по идее переменная связывается с частью объекта, а значит изменив переменную должна меняться и соответствующая часть объекта.
var не всегда переменная.
foreach(var o in new object[0])
{
o = new object(); //Не компилируется
}
VD>Еще switch и if — это стейтменты, что не всегда удобно. Нужно заводить аналогичные выражения, чтобы их можно было использовать внутри выражений и рекурсивно.