如何获取delphi函数中参数传递的变量或对象节点的名称?

Ple*_*rds 2 delphi variables function parameter-passing delphi-2006

在Java中,我们有类似的地方VarName.toString来描述var的名称.

我在Delphi中有一个代码,我需要实现相同的功能,因为我有一个record类型,我需要识别许多子字符串:

type
THierarchyAccess = String; // receive the user permissions from the MySQL DB
THierarchy = record
      MOD_HIERARQUIA   : THierarchyAccess; // 'BROWSE_ONLY', 'MANAGE', 'NONE'...
      MOD_OPERADORES   : THierarchyAccess;
      MOD_ESTATISTICAS : THierarchyAccess;
      MOD_AUDITORIA    : THierarchyAccess;
      MOD_HOMEPAGE     : THierarchyAccess;
      MOD_HOTSITES     : THierarchyAccess;
      MOD_MATRIZ       : THierarchyAccess;
      MOD_NOTICIAS     : THierarchyAccess;
      MOD_VISITANTES   : THierarchyAccess;
          ...
          end;
...

function  TAccess.IsAccessPermited(apNeed, apHave: String): Boolean;
begin
// HERE I need to know not only the content of "apHave", 
// but if it came from THierarchy.MOD_HOTSITES or THierarchy.MOD_MATRIZ etc.
end;

...

if IsAccessPermited('BROWSE_ONLY', MyHierarchy.MOD_HOTSITES) then Form2.Open;
Run Code Online (Sandbox Code Playgroud)

有没有一种优雅的方法来识别传递给函数的变量名称是什么?

dth*_*rpe 7

通常,诸如记录字段名称或参数变量名称之类的符号名称不能由诸如Delphi的本机代码编译器包括在可执行映像中,因为本机机器指令仅关注偏移和地址,而不是名称.这就是为什么Delphi生成的exes比同等的.NET或Java应用程序小几百倍的原因之一.

但是,类型元数据(如字段名称)对"自足"对象流可能很有用.此类型元数据通常由本机代码编译器称为运行时类型信息(RTTI).

您可以尝试编译上面的类型,并{$M+}在类型声明周围启用.请务必{$M-}立即设置,以避免使用不需要的类型名称膨胀您的exe.

然后,您需要使用Delphi RTTI方法来访问记录结构字段的名称.

但是,我认为这不适用于您的示例代码,因为您将记录字段作为参数传递给另一个函数.要获取记录的第n个字段的名称,您需要记录类型.

您的IsAccessPermitted()函数只接收记录字段内容的值.它不知道用什么字段来传递值,或者甚至根本不使用记录