当前位置:  开发笔记 > 编程语言 > 正文

OCaml类型具有不同的特异性水平

如何解决《OCaml类型具有不同的特异性水平》经验,为你挑选了1个好方法。

我试图模拟OCaml中的接口,并使用"类型"构造.我有两种类型:

type fooSansBar = {a: string; b: int};;
type fooConBar = {a:string; b:int; bar:char};;

...并且想要定义一个特定的fooSansBar:

let fsb = {a="a"; b=3};;

...但是我被告知条形区域没有定义.由此看来,与我在匹配fooSansBar签名时传递的值相反,系统认为我正在尝试创建一个fooConBar.如果存在上面定义的两种类型,是否可以创建fooSansBar?

另外(因为我是OCaml的新手)有更好的方法来模拟界面吗?



1> Norman Ramse..:

在OCaml中,记录类型中的字段名称必须是唯一的,因此您定义的两种类型不能同时共存.Caml是我所知道的唯一一种语言.

因为第二个定义隐藏了第一个定义,当编译器看到a和b字段时,它期望它们属于该fooConBar类型,因此会抱怨缺少的bar字段.

如果您正在尝试模拟接口,那么在Caml中执行此操作的正确方法是定义一个module type.

module type FOO_CON_BAR = sig
  val a : string
  val b : int
  val bar : char
end

一个例子:

module Example = struct
  let a = "hello"
  let b = 99
  let c = '\n'
end

使用模块和模块类型,您也可以获得子类型; 没有必要求助于物体.

PS我的Caml生锈了; 语法可能已关闭.

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有