为什么我的地图类型没有被 Reason 导出?
Why is my Map type not exported by Reason?
在 之后,我创建了一个定义具体 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
type 存在,但 scores
value 不存在,因此出现错误 "The value scores can't be found in Scores".
另一方面,模块可以有 "fields",所以这就是它存在的原因。当然,您也可以像为 Scores.t
类型设置别名一样为 empty
设置别名:
type scores = StringMap.t(int);
let empty = StringMap.empty;
最后,你问"Surely to make a Map instance the key-type must be known?"。确实如此,而且您已经将其广为人知。您在创建 StringMap
模块 (Map.Make({ type t = string; ...0);
) 时指定了密钥类型。但是,您不需要指定值类型 (int
)。这将被推断。
在 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
type 存在,但 scores
value 不存在,因此出现错误 "The value scores can't be found in Scores".
另一方面,模块可以有 "fields",所以这就是它存在的原因。当然,您也可以像为 Scores.t
类型设置别名一样为 empty
设置别名:
type scores = StringMap.t(int);
let empty = StringMap.empty;
最后,你问"Surely to make a Map instance the key-type must be known?"。确实如此,而且您已经将其广为人知。您在创建 StringMap
模块 (Map.Make({ type t = string; ...0);
) 时指定了密钥类型。但是,您不需要指定值类型 (int
)。这将被推断。