首页 > 解决方案 > 如何命名 OCaml 变体中的字段?

问题描述

具有大量字段的变体开始变得笨拙。每个字段的作用都以注释结尾:

type ty =
  | FunTy of (*all*) ty list * (*params*) ty list * (*return type*) ty
  ...

一种解决方案是让变体的值成为记录。

type ty =
  | FunTy of ft
  ...
and ft = {
  forall : ty list;
  p_tys : ty list;
  ret_ty : ty
}

但是,取消引用记录字段需要间接。这对我的目的无关紧要,但我可以看到这种性能差异使重构在实践中变得单一。

为了使这个答案保持客观,参考 OCaml 文档或风格指南会有所帮助。

标签: ocamlvariant

解决方案


自 OCaml 4.03(2016 年发布)以来,您可以使用内联记录,它为您提供了良好的记录语法接口——此外,您可以拥有可变字段——具有与元组语法相同的内存表示。

type ty =
  | FunTy of {
      forall : ty list;
      p_tys : ty list;
      ret_ty : ty
    }
  ...

您有一些工具来操作包含的记录,但是(与元组语法中的参数“元组”没有什么不同)它不是一等值(有关更多详细信息,请参阅上面链接的文档)。


推荐阅读