You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Delphi的OnEval函数中识别被调用的重载Tag函数?

在Delphi的OnEval中区分重载的Tag函数

你提到的Info.Params.Count确实是区分这两个重载函数最直接可靠的方式,因为两个Tag函数的参数数量存在明显差异:

  • 当Info.Params.Count = 1时,调用的是接受单个字符串参数的Tag(string)重载
  • 当Info.Params.Count = 2时,调用的是接受两个整数参数的Tag(Integer, Integer)重载

如果需要更严谨的判断(避免传入参数类型不匹配的情况),还可以结合参数的类型进行验证:

示例实现代码

procedure TYourClass.OnEval(Sender: TObject; Info: TExprEvalInfo);
begin
  if UpperCase(Info.FuncName) = 'TAG' then
  begin
    case Info.Params.Count of
      1: begin
           // 验证参数是否为字符串类型
           if Info.Params[0].DataType in [ftString, ftWideString, ftUnicodeString] then
             Info.Result.AsString := Tag(Info.Params[0].AsString)
           else
             raise Exception.Create('Tag函数参数类型错误,需传入字符串');
         end;
      2: begin
           // 验证两个参数是否为整数类型
           if (Info.Params[0].DataType = ftInteger) and (Info.Params[1].DataType = ftInteger) then
             Info.Result.AsString := Tag(Info.Params[0].AsInteger, Info.Params[1].AsInteger)
           else
             raise Exception.Create('Tag函数参数类型错误,需传入两个整数');
         end;
    else
      raise Exception.Create('Tag函数参数数量错误,需传入1个字符串或2个整数');
    end;
  end;
end;

补充说明

  1. 参数数量判断是核心:因为两个重载的参数数量不同,这是最直观的区分依据,无需复杂逻辑
  2. 类型验证可选:如果你的场景中可能出现参数数量匹配但类型错误的情况,加入类型检查可以提前抛出明确的错误,避免后续执行异常

内容的提问来源于stack exchange,提问作者Petey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 11:03:17