Здравствуйте, AngeL B., Вы писали:
AB>не помогает даже явное указание типа фиктивной переменной, типа
AB>def inlist = ll.Contains((_ : A).Len);
AB>только ошибка уже другая. Типа в А нет поля Len
AB>Почему?
Все верно. В данном случае компилятор из _.Len создает замыкание и пытается на основе того что ll.Contains принимает int вывести типы. У него это ессно не получается.
Если написать так
def inlist = a => ll.Contains(a.Len);
те явно сказать компилятору что замыкание нужно делать из всего выражения то все компилируется.
... << RSDN@Home 1.2.0 alpha rev. 673>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
[Record]
class A
{
[Accessor(Len)]
private _len : int;
}
def la = [A(1), A(2), A(3)];
def ll = [1, 2, 3];
def inlist(a) { ll.Contains(a.Len) }
def la = la.Filter(inlist);
Хотя, если честно, я и это с трудом понимаю .
Проще так:
def la = la.Filter(x => [1, 2, 3].Contains(x.Len));
AB>не помогает даже явное указание типа фиктивной переменной, типа
AB>def inlist = ll.Contains((_ : A).Len);
Дык а что ты тваришь то? Ты пыташся передать методу Contains функцию "x => x.Len" (именно так понимает компилятор выражение "_.Len", как его не типизируй). Естественно компилятор будет всей душой противиться этому.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, AngeL B., Вы писали:
AB>это и так понятно. Я думал в терминах частичного применения, и чересчур расширил его на целые выражения. Правильный ответ надо смотреть у VladD2
Типа у меня ответ не правильный...
... << RSDN@Home 1.2.0 alpha rev. 673>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, VladD2, Вы писали:
AB>>def inlist = ll.Contains((_ : A).Len); VD>Дык а что ты тваришь то? Ты пыташся передать методу Contains функцию "x => x.Len" (именно так понимает компилятор выражение "_.Len", как его не типизируй). Естественно компилятор будет всей душой противиться этому.
ВО! Это то что надо.
Я думал об этом как о частичном применении функции и потерял из вида, что в данном случае записано целое выражение с вычислением длины и затем уже вызовом функции.
Спасибо.
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, AngeL B., Вы писали:
AB>>это и так понятно. Я думал в терминах частичного применения, и чересчур расширил его на целые выражения. Правильный ответ надо смотреть у VladD2 WH>Типа у меня ответ не правильный...
Правильный, правильный!
Я просто поняло в чем дело только из ответа Влада в конце. А твой воспринял как описание как надо сделать, а не почему так....недопонял короче