Этот вопрос связан с другим моим вопросом, и я надеюсь получить некоторые идеи оттуда:
Возможно ли, чтобы локальная управляемая переменная (запись, интерфейс и т. д.) могла контролировать локальную область и «перемещаться» к другой без использования каких-либо явных параметров out/var или значений результатов?
Извините, если это звучит странно, но это позволило бы мне создать управляемый объект внутри вызываемого метода, который будет уничтожен только тогда, когда завершится вызывающий метод, а не тот, который у него есть. был создан в , при этом весь процесс полностью прозрачен для вызывающей стороны (это основная цель). Вызывающий не должен ничего объявлять.
Первая хакерская идея приходит сюда:
(Неправильно) Используйте автоматически созданный объект-оболочку для анонимных методов и присоединяйте к нему данные. Мое предположение таково: этот объект создается в локальной области вызывающего абонента, живет в локальной области вызываемого абонента (поэтому вызываемый объект может прикреплять к нему данные) и живет до 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;
Я думаю, я должен.