0

假设我有两个文件:

foo.re
bar.re

说我现在有,在顶部bar.re

open MyProject.Foo;

这无法编译:

This module is not a structure; it has type
  (module MyProject.Foo)

如果我重新运行编译,一切正常

如果我将该行更改为open Foo;一切编译正常。

为什么我要观察这种行为?

4

1 回答 1

0

ReasonML 将每个文件视为一个模块,做法是将文件名大写,这样

Foo.re
Bar.re

我们还假设我们在 Foo 调用 bar 中定义了一个函数,在 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 的书的基本模块部分

于 2018-07-23T13:14:13.273 回答