types - 两条记录的两个字段在 OCaml 中具有相同的标签

标签 types ocaml record

我定义了两种记录类型:

type name =
    { r0: int; r1: int; c0: int; c1: int;
      typ: dtype;
      uid: uid (* key *) }

and func =
    { name: string;
      typ: dtype;
      params: var list;
      body: block }

后来我得到了一行代码的错误:Error: The record field label typ belongs to the type Syntax.func but is mixed here with labels of type Syntax.name
谁能告诉我我们是否不应该让两个记录的两个字段具有相同的标签,例如 typ在这里,这使编译器感到困惑。

最佳答案

不,你不能,因为它会破坏类型推断。

顺便说一句,您可以使用模块命名空间来解决这个问题:

module Name = struct
  type t = { r0:int; ... }
end

module Func = struct
  type t = { name: string; ... }
end

稍后,您可以在字段名称前加上正确的模块:
let get_type r = r.Name.typ
let name = { Name.r0=1; r1=2; ... }
let f = { Func.name="foo"; typ=...; ... }

请注意,您只需要为第一个字段添加前缀,编译器会自动理解您正在编写的值的类型。

关于types - 两条记录的两个字段在 OCaml 中具有相同的标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8928970/

相关文章:

Haskell 数据类型别名命名

ios - iPhone NSXMLParser 解析字符串并存储在 NSNumber 变量和不同的数据类型中

list - List.rev 行为奇怪吗?

Haskell 私有(private)记录,如 OCaml

php - php 类型比较背后的基本原理

database - 来自 db 的 codeigniter 值类型

OCaml 坚持函数不是多态的,但不指定类型

unit-testing - 在 OCaml 中制作测试替身

haskell - 在 GHC 手册中记录通配符示例

java - 记录并存储曲线形状的路径