Этот вопрос относится к моему другому , и я надеюсь получить от него некоторые идеи:
Возможно ли, чтобы локальная управляемая переменная (запись, интерфейс, ...) контролировала локальную область и «переходила» к другой без использования каких-либо явных параметров out / var или значений результата?
Извините, если это звучит странно, но это позволило бы мне создать управляемый объект внутри вызываемого метода, который будет уничтожен, только когда закончится вызывающий метод, а не тот, который он был создан, в то время как весь процесс полностью прозрачен для вызывающей стороны (это главная цель). Абонент не должен ничего объявлять.
Первая хакерская идея приходит сюда:
(Mis-) Использовать автоматически созданный объект-обертку для анонимных методов и прикреплять к нему данные. Мое предположение таково: этот объект создается в локальной области вызывающих абонентов, живет во время локальной области вызываемых абонентов (чтобы вызываемый объект мог прикреплять к нему данные) и действует до end;
вызывающего абонента.
Можно ли прикрепить данные к этому объекту-обертке? Помимо хакерства: есть ли шанс работать?
Редактировать : Может быть, проще сформулировать вопрос: «Как передать значение результата из функции без использования каких-либо параметров или результата функции?»
Edit2 : Написание некоторого кода заставляет меня задуматься, должен ли я его отпустить:
function TForm1.L<T>(Func: TFunc<T>):T;
var
Value: T;
begin
Result := Func;
// now attach something to the anon wrapper of Func
end;
function TForm1.O<T>(Value: T): T;
begin
Result := T;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
List: TList;
begin
for Item in L(O<TList>(List)) do
begin
end;
// List should be destroyed here
end;
Я думаю, что должен.