如何将另一个函数返回的函数分配给函数变量?结果而不是生成函数本身

问题描述 投票:16回答:2

一个函数返回一个匿名函数。我想将结果分配给一个变量。但是,编译器认为我正在尝试分配函数,而不是函数的结果。我该如何解决?

program Project9;

{$APPTYPE CONSOLE}

type
  TMyEvent = reference to function: string;

var
  v1: TMyEvent;

function GetHandler: TMyEvent;
begin
  Result := function: string
            begin
              Result := '';
            end;
end;

begin
  v1 := GetHandler;  // <- Incompatible types: 'TMyEvent' and 'Procedure'
end.

注意:我确实有一种解决方法,但我希望可以在不引入包装的情况下解决此问题:

program Project9;

{$APPTYPE CONSOLE}

type
  TMyEvent = reference to function: string;

  TWrapper = record
    FHandler: TMyEvent;
  end;

var
  v1: TMyEvent;

function GetHandler: TWrapper;
begin
  Result.FHandler := function: string
                     begin
                       Result := '';
                     end;
end;

begin
  v1 := GetHandler.FHandler;  // <- works
<<

一个函数返回一个匿名函数。我想将结果分配给一个变量。但是,编译器认为我正在尝试分配函数,而不是函数的结果。 ...

function delphi variables function-pointers anonymous-methods
2个回答
19
投票
v1 := GetHandler();

7
投票
© www.soinside.com 2019 - 2024. All rights reserved.