Skip to content

Latest commit

 

History

History
76 lines (59 loc) · 3.81 KB

8.5.运行时类型信息.md

File metadata and controls

76 lines (59 loc) · 3.81 KB

8.5.运行时类型信息

Haxe编译器为注解的类或者通过 :rtti 元数据注解的扩展的类生成运行时类型信息(RTTI)。这个信息被存储为一个 XML 字符串到一个字段 __rtti,并可以通过 haxe.rttiXmlParser 进行处理。结果的结构被描述为 RTTI 结构(第8.5.1节)。

从 Haxe 3.2.0 以后: 类型 haxe.rtti.Rtti 已经被引入,来简化RTTI相关的工作 。检索这个信息现在非常简单:

@:rtti 
class Main { 
    var x:String; 
    static function main() { 
        var rtti = haxe.rtti.Rtti.getRtti(Main); 
        trace(rtti); 
    }
}

8.5.1.RTTI 结构

一般类型信息:

  • path: path 类型(第3.7节)的类型路径
  • module:包含这个类型的模块(第3.7节)的类型路径
  • file: 包含这个类型的 .hx 文件的完整的斜线路径。在没有这个文件的时候可以为 null,例如,如果这个类型通过一个宏(第9章)来定义。
  • params: 一个字符串类型的数组,表示这个类型的类型参数(第3.2节)的名称。自Haxe 3.2.0起,这不包括约束(第3.2.1节)。
  • doc: 类型的文档。这个信息只有编译器标记(第6.1节) -D use_rtti_doc 被涉及的时候才可用。否则,或者如果类型没有文档,值为 null 。
  • isPrivate: 是否类型为 私有(第3.7.1节)。
  • platforms: 一个字符串列表,表示类型可用的目标平台。
  • meta: 类型被注解的元数据。

类类型信息:

  • isExtern: 是否类为 外部的(第6.2节)
  • isInterface: 是否类实际上是一个接口(第2.3.3节)。
  • superClass: 被它的类型路径和类型参数列表定义的它的父类。
  • interfaces: 被它们的类型路径和类型参数列表定义的接口列表。
  • fields: 成员类字段(第4章)列表,描述为类字段信息(第8.5.1节)。
  • statics: 静态类字段列表,描述为类字段信息(第8.5.1节)。
  • tdynamic: 如果没有这样的类型存在则为被通过类或者null动态实现(第2.7.2节)的类型。

枚举类型信息:

  • isExtern: 枚举是否为外部的(第6.2节)。
  • constructors: 枚举的构造函数列表。

抽象类型信息:

  • to:一个包含隐式定义 to 转换(第2.8.1节)的数组。
  • from: 一个包含隐式定义 from 转换(第2.8.1节)的数组。
  • impl: 实现类的类型信息(第8.5.1节)。
  • athis: 抽象类型的潜在类型(第2.8节)。

类字段信息:

  • name: 字段名。
  • type: 字段类型。
  • isPublic: 字段是否为 public(第4.4.1节)类型。
  • isOverride: 字段是否重载(第4.4.4节)另一个字段。
  • doc: 字段的文档。这个信息只在如果编译器标记(第6.1节) -D use_rtti_doc 被涉及的时候可用。否则,或者如果字段没有文档,值为 null 。
  • get: 字段的读取访问行为(第4.2节)。
  • set: 字段的写入访问行为(第4.2节)。
  • params: 一个字符串数组,表示字段拥有的类型参数(第3.2节)的名称。 从Haxe 3.2.0 起,这不包括约束(第3.2.1节)。
  • platforms: 一个字符串列表表示字段可用的目标平台。
  • meta: 字段被注解用的元数据。
  • line: 字段定义的行号。这个信息只有字段有一个表达式的时候可用。否则值为null。
  • overloads: 字段可用的重载列表,或者如果没有存在的重载则为 null 。

枚举构造函数信息: name: 构造函数的名称。 args: 构造函数的参数列表,如果没有可用参数则为null。 doc: 构造函数的文档。这个嘻嘻只有如果编译器标记(第6.1节) -D use_rtti_doc 被涉及的时候才可用。否则,或者如果构造函数没有文档,值为null。 platforms: 一个字符串列表,表示构造函数可用的目标平台。 meta: 构造函数被注解的元数据。