Dictionary 为什么我的地图类型没有按原因导出?
接下来,我创建了一个文件(以及相应的模块),该文件定义了一个具体的Dictionary 为什么我的地图类型没有按原因导出?,dictionary,module,ocaml,reason,reasonml,Dictionary,Module,Ocaml,Reason,Reasonml,接下来,我创建了一个文件(以及相应的模块),该文件定义了一个具体的Map类型: /* Scores.re */ module StringMap = Map.Make({ type t = string; let compare = compare }); type scores = StringMap.t(int); 现在,我想在另一个文件中使用该类型: /* Demo.re */ let currentScores = Scores.scores.empty; Js.log(c
Map
类型:
/* Scores.re */
module StringMap = Map.Make({
type t = string;
let compare = compare
});
type scores = StringMap.t(int);
现在,我想在另一个文件中使用该类型:
/* Demo.re */
let currentScores = Scores.scores.empty;
Js.log(currentScores);
但是,这给了我一个错误:
The value scores can't be found in Scores
如果我添加一个常量(例如,let n=123;
和Js.log(Scores.n);
),那么它就工作了
我在这里遗漏了什么?
分数
是一种类型,而类型,甚至记录类型,在类型本身上都没有字段。此外,类型和值位于不同的名称空间中,因此当scores
类型存在时,scores
值不存在,因此出现错误“在scores中找不到值scores”
另一方面,模块可以有“字段”,这就是它存在的原因。当然,您也可以使用与对分数进行别名相同的方式来别名empty
。t
键入:
type scores = StringMap.t(int);
let empty = StringMap.empty;
最后,您会问“确定要创建一个映射实例,密钥类型必须是已知的吗?”。确实是这样,你已经把它公之于众了。创建
StringMap
模块(Map.Make({type t=string;…0);
)时指定了键类型。不需要指定值类型(int
)但是,这是可以推断的。结果是空的存在于StringMap
上,而不是分数
。不过我觉得这很奇怪。当然要创建映射
实例,必须知道键类型吗?