Delphi中如何使用Exit语句返回record记录类型的函数结果?
Delphi 记录类型通过Exit语句返回值的实现方案
语法修正说明
你示例代码中用分号分隔记录字段的写法是语法错误,无论哪个版本的Delphi,内联构造记录时字段参数都需要用逗号分隔。
适配不同版本的实现方式
1. Delphi 10.3 Rio 及以上版本
10.3版本开始原生支持内联记录构造语法,你可以直接用两种写法实现:
- 命名字段传参写法,可读性更高:
function GetCount: TIntResult; begin if not IsLoggedIn then Exit(TIntResult(Value: 0, Error: 'Not logged in')); if not IsAdmin then Exit(TIntResult(Value: 0, Error: 'Not Admin')); // 正常业务逻辑 Result.Value := 100; Result.Error := ''; end;
- 顺序传参写法,代码更简洁:
Exit(TIntResult(0, 'Not logged in'));
2. 低于10.3的旧版本Delphi
旧版本不支持内联记录构造,可选择以下两种替代方案:
方案1:临时变量中转
先给局部记录变量赋值,再将变量传入Exit:
function GetCount: TIntResult; var LRet: TIntResult; begin if not IsLoggedIn then begin LRet.Value := 0; LRet.Error := 'Not logged in'; Exit(LRet); end; if not IsAdmin then begin LRet.Value := 0; LRet.Error := 'Not Admin'; Exit(LRet); end; // 正常业务逻辑 Result.Value := 100; Result.Error := ''; end;
方案2:自定义静态构造方法
给记录类型添加静态构造方法,调用后直接传入Exit,代码更整洁:
TIntResult = record Value: Integer; Error: String; class function Create(AValue: Integer; const AError: String): TIntResult; static; end; class function TIntResult.Create(AValue: Integer; const AError: String): TIntResult; begin Result.Value := AValue; Result.Error := AError; end; // 调用处代码 function GetCount: TIntResult; begin if not IsLoggedIn then Exit(TIntResult.Create(0, 'Not logged in')); if not IsAdmin then Exit(TIntResult.Create(0, 'Not Admin')); // 正常业务逻辑 Result.Value := 100; Result.Error := ''; end;
内容的提问来源于stack exchange,提问作者Георгий Пугачев
相关产品推荐
相关产品推荐

