nim中表/表类集中的任何类型

时间:2016-06-30 21:17:52

标签: dictionary nim

我如何制作它以便表格可以在Nim中具有键和值的任何类型?例如,以下代码不起作用:

{"a": "string", "b": 4}

它表示它期望(字符串,字符串)但得到(字符串,整数),这意味着类型是从第一个元组确定的。由于不允许任何类型的泛型,我该如何使它工作?

2 个答案:

答案 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]