gpt4 book ai didi

ocaml - 原因模块系统

转载 作者:行者123 更新时间:2023-12-04 17:07:19 25 4
gpt4 key购买 nike

https://facebook.github.io/reason/modules.html#modules-basic-modules

I don’t see any import or require in my file; how does module resolution work?

Reason/OCaml doesn’t require you to write any import; modules being referred to in the file are automatically searched in the project. Specifically, a module Hello asks the compiler to look for the file hello.re or hello.ml (and their corresponding interface file, hello.rei or hello.mli, if available).
A module name is the file name, capitalized. It has to be unique per project; this abstracts away the file system and allows you to move files around without changing code.

我尝试了原因模块系统,但无法理解它是如何工作的。

1) open 之间的区别是什么?和 include ?

2) 我有文件 foo.re带有定义的模块 Foo .我有文件 bar.re并想从模块 Foo 调用函数.

我应该 openinclude模块 Foobar.re ?或者直接访问 - Foo.someFunction ?

3) 模块接口(interface)只能实现 *.rei文件?并且模块接口(interface)文件应该同名但带有 rei分机?

最佳答案

1) open就像 import ,它将打开的模块中的导出定义添加到本地命名空间。 include将它们添加到模块中,就像您将定义从包含的模块复制到被包含者一样。 ìnclude因此也会导出定义(除非有一个接口(interface)文件/签名限制了导出的内容)

2)您应该更喜欢方便地使用最本地的模块,以免不必要地污染命名空间。所以通常你会想要使用直接访问,并且只有当一个模块被专门设计为在文件级别打开时你才应该这样做。但是有 open 的形式比文件级别更本地化。您可以open仅在函数范围内的模块,甚至以 Foo.(someFunction 4 |> otherFunction 2) 的形式限定为单个表达式

3) 顶层(文件)模块必须以 rei 的形式实现与 re 同名的文件文件。但是,您可以将模块类型定义为子模块的“接口(interface)”。

OCaml 的模块系统相当广泛和灵活。我建议阅读 Real World Ocaml 的模块章节以更好地掌握它:https://realworldocaml.org/v1/en/html/files-modules-and-programs.html

关于ocaml - 原因模块系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44377367/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com