代码之家  ›  专栏  ›  技术社区  ›  user3240588

在ocaml顶层打印多态容器

  •  7
  • user3240588  · 技术社区  · 10 年前

    举个愚蠢的例子,假设我有自己的数据结构, type 'a mylist = Empty | Cons of 'a * ('a mylist) .

    我希望顶层将此列表打印在表单中 {a,b,...} 在这里 a , b 类型的 'a 根据顶层安装的带有#install_printer的打印功能进行打印,或者如果没有可用的打印功能,如 <abstr> .

    我知道如何定义单形聚酯薄膜的印刷函数,但是否有一种多态的方法来告诉顶层只需放置 { , , } 并将它已经知道的信息用于介于两者之间的任何类型?

    1 回复  |  直到 10 年前
        1
  •  1
  •   hivert    10 年前

    我认为这不可能。原因是OCaml在运行时丢弃了类型,因此不可能有一个函数在运行时根据类型而表现不同。所以你不能定义这样的多态打印函数。请注意 #install_printer 不是OCaml语言的一部分,但它是toplevel的指令,toplevel仍然知道类型。唯一可能的解决方案是定义一个通用打印函数 'a 打印功能作为参数。类似于

    'a -> string ->  'a mylist -> unit
    

    但我想你已经知道了,不是吗?