¿Cómo y cuándo se capturan las variables referenciadas en los métodos anónimos de Delphi?
Esto fue impulsado por ¿Cómo comparar TFunc / TProc que contiene la función / procedimiento del objeto?, específicamente por el comentario de David a la pregunta de Barry. Como no tengo un blog para publicar esto, haré esta pregunta aquí y la responderé.
Pregunt: ¿Cuándo y cómo se capturan las variables referenciadas en los métodos anónimos de Delphi?
Ejemplo
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;
AmbosShowMessage
van a mostrar2
. ¿Por qué? CómoV
ser capturado y cuándo?