суббота, 11 апреля 2015 г.

Коротко. Что такое лямбды?

https://ru.wikipedia.org/wiki/%D0%9B%D1%8F%D0%BC%D0%B1%D0%B4%D0%B0-%D0%B8%D1%81%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5#.D0.92_.D1.8F.D0.B7.D1.8B.D0.BA.D0.B0.D1.85_.D0.BF.D1.80.D0.BE.D0.B3.D1.80.D0.B0.D0.BC.D0.BC.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D1.8F

"В языках программирования под «λ-исчислением» зачастую понимается механизм «анонимных функций» — callback-функций, которые можно определить прямо в том месте, где они используются, и которые имеют доступ к локальным переменным текущей функции."

https://ru.wikipedia.org/wiki/%D0%90%D0%BD%D0%BE%D0%BD%D0%B8%D0%BC%D0%BD%D0%B0%D1%8F_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F


Лямбда на то и ЛЯМБДА, что имеет доступ к ВЫЗЫВАЮЩЕМУ КОНТЕКСТУ.

var
 l_Stream : TFileStream;
begin
 l_Stream := TFileStream.Creat;
TraverseTree(procedure (const aNode: TNode)
 var
  l_T : String;
 begin
  l_T := l_Node.Text;
  l_Stream. // <- l_Stream - ДОСТУПЕН тут
   Write(@l_T, Length(l_T));
 end
)
end;

1 комментарий:

  1. Нет, лямбда имеет доступ к области видимости, в которой была объявлена. Вызвана она может быть и в другой области видимости, доступ к которой иметь не будет.

    ОтветитьУдалить