【问题标题】:Hashtables in ocamlocaml 中的哈希表
【发布时间】:2012-01-22 17:07:09
【问题描述】:

是否可以在 Ocaml 的同一个哈希表 (Hashtbl) 中存储不同的类型?哈希表真的仅限于一种类型吗?

【问题讨论】:

    标签: hashtable ocaml


    【解决方案1】:

    是的,哈希表条目仅限于每个表的一种类型。这实际上是关于 OCaml 类型系统的问题,而不是关于哈希表的问题。如果在哈希表中要求事物具有相同的类型似乎很奇怪,那么在列表中呢?

    不知道您要解决的问题,很难知道该提出什么建议。但是,通常要做的事情是创建一个代数类型,该类型对于您正在处理的每种类型都有一个变体:

    type alg = A of int | B of float
    

    (string, alg) Hashtbl.t 类型的值将存储整数和浮点数,使用字符串作为查找键。

    # let ht = Hashtbl.create 44;;
    val ht : ('_a, '_b) Hashtbl.t = <abstr>
    # Hashtbl.add ht "yes" (A 3);;
    - : unit = ()
    # Hashtbl.add ht "no" (B 1.7);;
    - : unit = ()
    # ht;;
    - : (string, alg) Hashtbl.t = <abstr>
    # Hashtbl.find ht "yes";;
    - : alg = A 3
    

    在你习惯了 OCaml 灵活而强大的类型之后,没有它就很难回到系统。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-02
      • 1970-01-01
      • 2011-05-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多