如何以记录作为结果退出 Delphi?

How to Exit with a record as result in Delphi?

Delphi 有一个带值退出的选项(示例:Exit(0);),但是如果 return 值是一条记录,我该如何带值退出?

TIntResult = record
  Value: Integer;
  Error: String;
end;

function GetCount: TIntResult;
begin
  if not IsLoggedIn then
    Exit(Value: 0; Error: 'Not logged in'); // I want this

  if not IsAdmin then
    Exit(TIntResult(Value: 0; Error: 'Not Admin')); // or this
  ...
end;

当然,您始终可以使用 Result 变量和 Exit

但是如果你想使用 Delphi 2009+ Exit(...) 语法——而不给它一个 TIntResult 类型的变量——两个最明显的选择是:

使用构造函数

type
  TIntResult = record
    Value: Integer;
    Error: string;
    constructor Create(AValue: Integer; const AError: string);
  end;

{ TIntResult }

constructor TIntResult.Create(AValue: Integer; const AError: string);
begin
  Value := AValue;
  Error := AError;
end;

那么你可以这样做:

function Test: TIntResult;
begin
  // ...
  Exit(TIntResult.Create(394, 'Invalid page.'));
end;

使用 TIntResult-返回函数

function IntRes(AValue: Integer; const AError: string): TIntResult;
begin
  Result.Value := AValue;
  Result.Error := AError;
end;

那么你可以这样做:

function Test: TIntResult;
begin
  // ...
  Exit(IntRes(394, 'Invalid page.'));
end;