鉴于(比方说)ref RootObj
,我可以发现它所引用的对象的类型吗? (我对typetraits
等的实验没有成功......)
例如,鉴于此:
import typetraits, typeinfo, system
type
TypeA = object of RootObj
field: int
var
a : ref RootObj = TypeA.new # an instance of TypeA on the heap
我可以获得a
的基础类型吗? repr
似乎知道,但system.type
没有。
echo repr a # output: ref 0x7f73e856c048 --> [field = 0]
echo a.type.name # output: ref RootObj
typeinfo
模块似乎没有解决这个问题 - 它只处理原始类型,因此可以识别对象(akObject
),但不能识别对象的类型。
我怀疑还有另一种方式,但它是什么?
答案 0 :(得分:1)
目前,没有通用的方法来获取运行时ref对象的类型名称。这种功能需要将类型名称打包到二进制文件中,增加其大小,在大多数情况下从不使用此信息。
因此,如果你真的需要某种运行时反射,你必须自己实现它。
但是,有一个-d:nimTypeNames
标志,可以将类型名称添加到二进制文件中,以进行GC调试。 repr
可以重复使用该信息,并且应该易于实现,因此非常值得提供功能。请注意,这只能用于调试目的。