如何将值的类型作为字符串?

时间:2015-02-05 19:36:48

标签: nim

我想知道是否可以在运行时从Nim中的值获取类型(int32 / float64 / string)?

我认为这可以通过" typeinfo"图书馆,但我无法弄清楚!

编辑:得到答案并快速完成:

import typetraits

type
    MyObject = object
        a, b: int
        s: string

let obj = MyObject(a: 3, b: 4, s: "abc")

proc dump_var[T: object](x: T) =
    echo x.type.name, " ("
    for n, v in fieldPairs(x):
        echo("    ", n, ": ", v.type.name, " = ", v)
    echo ")"

dump_var obj

输出:

MyObject (
    a: int = 3
    b: int = 4
    s: string = abc
)

2 个答案:

答案 0 :(得分:20)

关闭,它在typetraits模块中:

import typetraits

var x = 12
echo x.type.name

答案 1 :(得分:1)

您可以使用字符串化运算符 $,其重载签名为

proc `$`(t: typedesc): string {...}

例如

doAssert $(42.typeof) == "int"

请注意,nim manual 鼓励使用 typeof(x) 而不是 type(x)

<块引用>

由于历史原因,typeof(x) 也可以写成 type(x),但不鼓励使用 type(x)。