如何以记录作为结果退出 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;
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;