Это было вызвано Как сравнить функцию/процедуру, связанную с TFunc/TProc для объекта?, в частности, с комментариями Дэвида к вопросу Барри. Поскольку у меня нет блога, чтобы опубликовать это, я собираюсь задать этот вопрос здесь и ответить на него.
Вопрос: Когда и как переменные, на которые ссылаются анонимные методы Delphi, захвачены?
Пример:
procedure ProcedureThatUsesAnonymousMethods;
var V: string;
F1: TFunc<string>;
F2: TFunc<string>;
begin
F1 := function: string
begin
Result := V; // references local variable
end
V := '1';
F2 := function: string
begin
Result := V;
end
V := '2';
ShowMessage(F1);
ShowMessage(F2);
end;
Оба ShowMessage
собираются показать 2
. Зачем? Как V
захватывается и когда?