Дело в том, что нет необходимости делать это таким образом. Даже если это работает, зачем это делать? Функциональность закрытия - как вы должны это делать? Зачем бороться с этим?
отрим следующий тест-кейс:
{ CompilerVersion = 21 }
procedure Global();
procedure Local();
begin
end;
type
TProcedure = procedure ();
var
Proc: TProcedure;
begin
Proc := Local; { E2094 Local procedure/function 'Local' assigned to procedure variable }
end;
В строке 13 компилятор выдает сообщение с уровнем ERROR, запрещающее все случаи использования таких локальных процедур. «Официальное» решение заключается в продвиженииLocal
символ во внешнюю сферу (т.е. сделать его родным братомGlobal
) что негативно скажется на «структурированности» кода.
Я ищу способ обойти это самым изящным образом, предпочтительно, чтобы компилятор выдавал сообщение уровня WARNING.