Продолжаем наш парад неочевидностей
Что, делать, если я хочу в matche получить несколько дополнительных переменных?
НИ один из вариантов не работает (кроме первого и последнего):
match(10){
| 1 with p = 3 => ();
| 2 with p = 3 with g = 6 => ();
| 3 with p = 3, g = 7 => ();
| 4 with (p, g) = (4, 5) => ();
| 5 with p = 3 and g = 8 => ();
| _ => ();
}
И зачем, вообще, нужен with в match, если всегда можно сделать так:
match(10){
| 3 => def p = 10; g = 20; r = 30; ...
}
Здравствуйте, MAMOHT, Вы писали:
MAM>И зачем, вообще, нужен with в match, если всегда можно сделать так:
MAM>MAM> match(10){
MAM> | 3 => def p = 10; g = 20; r = 30; ...
MAM> }
MAM>
Иногда удобно с with, иногда можно без него.
match() { | ... with (x = 10, y = 11) => ... }
http://www.rsdn.ru/forum/nemerle/5109828.flat#5109828Автор: _NN_
Дата: 22.03.13
P.S.
Пора это в FAQ добавить.
Здравствуйте, MAMOHT, Вы писали:
MAM>И зачем, вообще, нужен with в match, если всегда можно сделать так:...
Он позволяет задать значение для вхождений паттерна:
def lst : list[int] = [43];
match (lst)
{
| [x, y] // x и y определяются в паттерне
| [x] with y = f(x) // x определяется в патерне, а y задается через with
| [] with (x = 77, y = f(x)) // и x, и y задается через with
=>
// код обращается к x и y не заботясь является ли это переменной
// связанной в паттерне или заданной через
System.Console.WriteLine ($ "x = $x, y = $y");
| _ => System.Console.WriteLine ("oops");
}