说我有两个文件:
foo.re
bar.re
说我现在在bar.re
顶部
open MyProject.Foo;
无法通过以下方式进行编译:
This module is not a structure; it has type
(module MyProject.Foo)
如果我重新运行编译,一切正常
如果我将该行更改为open Foo;
,一切都将正常编译。
为什么我要观察这种行为?
答案 0 :(得分:0)
ReasonML将每个文件视为一个模块,做法是将文件名大写,这样
Foo.re
Bar.re
我们还假设我们在Foo调用栏中定义了一个函数,并在Bar调用foo中定义了另一个函数。
所以我们会有:
/* Inside Foo.re */
let bar = string => {}
/* Inside Bar.re */
let foo = string => {}
从另一个名为Main.re的模块中,我们可以将上面的内容引用为
。let myResult = Foo.bar("happy");
let ourResult = Bar.foo("days);
或
open Foo, Bar;
let myResult = bar("happy");
let ourResult = foo("days");
因此,当要求输入open MyProject.Foo
时,您是在模块MyProject中要求子模块Foo,该子模块不存在。当然,如果您创建了MyProject.re
,并向该文件添加了一个名为Foo
的模块,那么您的open MyProject.Foo
将会正常工作。
更多参考文献:
reasonML模块所基于的基础Ocaml。 Axel Rauschmayer的《 ReasonML》一书中的Basic modules部分