我如何制作它以便表格可以在Nim中具有键和值的任何类型?例如,以下代码不起作用:
{"a": "string", "b": 4}
它表示它期望(字符串,字符串)但得到(字符串,整数),这意味着类型是从第一个元组确定的。由于不允许任何类型的泛型,我该如何使它工作?
答案 0 :(得分:2)
您可以使用以下方法(取自json模块):
import hashes, table
type MyTypeKinds = enum
MNil, MInt, MString
type MyGenericType = object
case kind*: MyTypeKinds
of MString:
str*: string
of MInt:
num*: BiggestInt
of MNil:
nil
proc hash(mg: MyGenericType): Hash =
case mg.kind:
of MString:
result = hash(mg.str)
of MInt:
result = hash(mg.num)
of MNil:
result = hash(0)
var genericTable = initTable[MyGenericType, MyGenericType]()
var key, val: MyGenericType
new key
new val
key.kind = MString
key.str = "a"
val.kind = MInt
val.num = 4
genericTable[key] = val
echo genericTable[key].num
为了更好的可读性,您可能希望实现类似json' % operator的内容。
这样你仍然不能使用任何类型,只能使用一组预定义的类型,但这很好,因为表需要类型才能有哈希过程。
答案 1 :(得分:0)
#it is already in language core :
var Python_like_dic: openArray[(string, string)] = {"a": "string", "b": 4}
#iterations :
for i in Python_like_dic :
echo i[0] , " = " , i[1]