Вопрос про частичное применение
От: SergASh  
Дата: 12.10.07 17:50
Оценка:
Привет всем!

Почему не компилируется следующий код?
[Record]
class Person
{
  [Accessor] name_ : string;
}

module Program
{
  Main() : void
  {
    def lst = [ Person("John"), Person("Jane"), Person("Hannah") ];
    def lst = lst.Filter( "John" != _.Name ); // Почему так нельзя? 
    _ =ReadKey();
  }
}


Спасибо.
Re: Вопрос про частичное применение
От: Иванков Дмитрий Россия  
Дата: 12.10.07 18:50
Оценка: 1 (1) +1
Здравствуйте, SergASh, Вы писали:

SAS>Привет всем!


SAS>Почему не компилируется следующий код?

SAS>
...
SAS>    def lst = lst.Filter( "John" != _.Name ); // Почему так нельзя? 
...
SAS>


Ну, потому что это не только частичное применение уже
_.Name это x => x.Name
"Jonh" != (x => x.Name) это не x => ("John" != x.Name)

Протаскивание _ на верхние уровни неоднозначно (как минимум есть возможность протащить на самый верх, сделав lst функцией), с другой стороны работающая запись с "x =>" не так уж и длинна, так что все вполне логично
Re[2]: Вопрос про частичное применение
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.10.07 06:01
Оценка: +1
Здравствуйте, Иванков Дмитрий, Вы писали:

ИД>Ну, потому что это не только частичное применение уже


Ага. И надо бы поработать над сообщениями компилятора в подобных случаях. А то с непривычки запутаться очень просто.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.