with лямбда
От: Ka3a4oK  
Дата: 18.05.11 08:38
Оценка:
Компилятор ругается на такой код:

match(t)
{
|2 with f=fun(a){a*2} => f(t)
|3 with f=fun(a){a+3} => f(t)
};


Если поставить скобки, то все ок:

match(t)
{
|2 with f= ( fun(a){a*2} ) => f(t)
|3 with f= ( fun(a){a+3} ) => f(t)
};


Это баг или бай дезайн?
Re: with лямбда
От: Don Reba Канада https://stackoverflow.com/users/49329/don-reba
Дата: 18.05.11 09:33
Оценка:
А какой в этом смысл? Разве функции можно сравнивать с образцом?
Ce n'est que pour vous dire ce que je vous dis.
Re[2]: with лямбда
От: Ziaw Россия  
Дата: 18.05.11 09:43
Оценка: 3 (1)
Здравствуйте, Don Reba, Вы писали:

DR>А какой в этом смысл? Разве функции можно сравнивать с образцом?


Сравнивать нельзя, но можно представить сценарий типа:

match (action, postAction)
{
  | (action, null) with (postAction = fun() {})
  | (action, postAction) =>
    action(data);
    postAction();
}
Re[2]: with лямбда
От: _nn_ www.nemerleweb.com
Дата: 18.05.11 09:48
Оценка:
Здравствуйте, Don Reba, Вы писали:

DR>А какой в этом смысл? Разве функции можно сравнивать с образцом?


Тут не сравнение, а присваивание.

Похоже все же недочет:
using System.Console;

match (1)
{
  | x when (fun(p){p})(1) == 1 => Write("A");
  | _ => Write("B");
}


Тут без скобок тоже не скомпилируется.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: with лямбда
От: hardcase Пират http://nemerle.org
Дата: 18.05.11 10:02
Оценка:
Здравствуйте, Ka3a4oK, Вы писали:

KK>Это баг или бай дезайн?


Это баг бай дезайн. Там проблемы с приоритетами операций. В общем случае скобки with( ... ) спасают ситуацию.
/* иЗвиНите зА неРовнЫй поЧерК */
Re: with лямбда
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.05.11 18:36
Оценка:
Здравствуйте, Ka3a4oK, Вы писали:

KK>Если поставить скобки, то все ок:...

KK>Это баг или бай дезайн?

Ага. В и в документации описано.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.