@Che_Bu_Rashka

Анонимные методы, замыкания. Можете объяснить пример?

Цитирую:
Как следует из названия, анонимные методы представляют собой процедуры или функции, которые не имеют ассоциированного имени. Анонимный метод есть блок кода, который может быть ассоциирован с переменной или быть использован в качестве параметра для другого метода. Кроме того, анонимные методы могут использовать переменные из контекста, где определен метод. Объявление и использование анонимных методов не требует сложного синтаксиса. Их синтаксис аналогичен конструкции замыканий (closures), характерных для других языков программирования.


function MakeAdder(y: Integer): TFuncOfInt;
begin
 Result := function(x: Integer)
 begin
 Result := x + y;
 end; 
end;


Функция MakeAdder возвращает безымянную функцию, т.е. анонимный метод. Тип анонимного метода декларируется как ссылка на метод.
Пример: выполнение функции MakeAdder

var
 adder: TFuncOfInt;
begin
adder := MakeAdder(20);               // что происходит тут ?
 Writeln(adder(22));  // prints 42  // и тут ?
end.
type
 TFuncOfInt = reference to function(x: Integer): Integer;


  1. может ли кто по шагам объяснить, как это работает?
  2. правильно ли я понял, что в строке adder := MakeAdder(20); в теле функции сохраняется значение 20, в переменной у, которое остается пока живет переменная adder? И это и есть замыкание?
  3. А в строке Writeln(adder(22)) происходит вызов внутренней безымянной функции function(x: Integer), где в переменную х передается значение 22.


И еще. Верно ли , что теперь с таким механизмом ,функции в Delphi, становятся объектами первого класса, ведь теперь их можно передавать в параметрах другим функциям. А это уже функциональное программирование?
  • Вопрос задан
  • 638 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы