我想知道是否可以在运行时从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
)
答案 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)。