Неcколько with в одном строке matcha
От: MAMOHT  
Дата: 12.09.14 16:26
Оценка:
Продолжаем наш парад неочевидностей

Что, делать, если я хочу в 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; ...
        }
Re: Неcколько with в одном строке matcha
От: _NN_ www.nemerleweb.com
Дата: 13.09.14 19:42
Оценка:
Здравствуйте, 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 добавить.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Неcколько with в одном строке matcha
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.09.14 22:06
Оценка:
Здравствуйте, 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");
}
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.