Цитирую:
Как следует из названия, анонимные методы представляют собой процедуры или функции, которые не имеют ассоциированного имени. Анонимный метод есть блок кода, который может быть ассоциирован с переменной или быть использован в качестве параметра для другого метода. Кроме того, анонимные методы могут использовать переменные из контекста, где определен метод. Объявление и использование анонимных методов не требует сложного синтаксиса. Их синтаксис аналогичен конструкции замыканий (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;
- может ли кто по шагам объяснить, как это работает?
- правильно ли я понял, что в строке adder := MakeAdder(20); в теле функции сохраняется значение 20, в переменной у, которое остается пока живет переменная adder? И это и есть замыкание?
- А в строке Writeln(adder(22)) происходит вызов внутренней безымянной функции function(x: Integer), где в переменную х передается значение 22.
И еще. Верно ли , что теперь с таким механизмом ,функции в Delphi, становятся
объектами первого класса, ведь теперь их можно передавать в параметрах другим функциям. А это уже функциональное программирование?