给定(比方说)一个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 RootObjtypeinfo模块似乎不能解决这个问题-它只处理原始类型,因此可以识别对象(akObject),但不能识别对象的类型。
我怀疑还有另一种方法,但它是什么呢?
发布于 2018-04-09 20:47:55
目前还没有通用的方法在运行时获取ref对象的类型名称。这样的功能需要将类型名称打包到二进制文件中,增加其大小,而在大多数情况下,这些信息从未使用过。
因此,如果你真的需要某种运行时反射,你必须自己实现它。
但是,出于GC调试的目的,有一个-d:nimTypeNames标志允许将类型名称写入二进制文件。repr可以重用这些信息,而且应该很容易实现,所以它非常值得一个功能请求。还要注意的是,这只能用于调试目的。
https://stackoverflow.com/questions/49706654
复制相似问题