首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >给定一个泛型对象`ref`,我可以发现它引用的对象的类型吗?

给定一个泛型对象`ref`,我可以发现它引用的对象的类型吗?
EN

Stack Overflow用户
提问于 2018-04-07 18:59:01
回答 1查看 327关注 0票数 1

给定(比方说)一个ref RootObj,我可以发现它引用的对象的类型吗?(我用typetraits等做的实验没有成功...)

例如,给定以下内容:

代码语言:javascript
复制
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不知道。

代码语言:javascript
复制
echo repr a      # output: ref 0x7f73e856c048 --> [field = 0]
echo a.type.name # output: ref RootObj

typeinfo模块似乎不能解决这个问题-它只处理原始类型,因此可以识别对象(akObject),但不能识别对象的类型。

我怀疑还有另一种方法,但它是什么呢?

EN

回答 1

Stack Overflow用户

发布于 2018-04-09 20:47:55

目前还没有通用的方法在运行时获取ref对象的类型名称。这样的功能需要将类型名称打包到二进制文件中,增加其大小,而在大多数情况下,这些信息从未使用过。

因此,如果你真的需要某种运行时反射,你必须自己实现它。

但是,出于GC调试的目的,有一个-d:nimTypeNames标志允许将类型名称写入二进制文件。repr可以重用这些信息,而且应该很容易实现,所以它非常值得一个功能请求。还要注意的是,这只能用于调试目的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49706654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档