在 SML 中构建库
Structuring a Library in SML
我目前正在用标准 ML 构建一个测试库(使用 Poly/ML 作为解释器)。我有以下目录结构:
project/a.sml
project/src/b.sml
project/src/c.sml
...
其中 a.sml
只是一堆要使用的调用
use "src/b.sml"
use "src/c.sml"
...
b.sml
,c.sml
等都是这样的结构定义
structure ComponentX
struct
...
end
它们构成了很好的、逻辑上独立的库组件。我有时也会在一个文件中创建一个模块,然后在另一个文件中的同一模块中引入子结构。
然后我可以通过调用 use "a.sml"
.
在项目的根目录中使用测试库。
但是,我好像不能使用自己目录之外的代码,这有点问题。例如,假设我在 project
的父目录中。如果我随后调用 use "project/a.sml"
,随后对 use "src/x.sml"
的调用将尝试在父目录(不存在)中找到 src
目录。
有没有什么方法可以做一个相对的use
,或者有没有更好的方法来构建它?
Poly/ML 中的 use
函数本身在递归使用时不会更改路径。您将需要使用 OS.FileSys.chDir
显式更改子目录中的路径。 use
只是一个函数,因此您可以根据需要重新定义它。 OS.Path
和 OS.FileSys
结构可能很有用。
另一种方法是重新组织您的代码以利用 PolyML.make
。您必须重命名文件以匹配每个文件包含的结构名称,例如ComponentX.sml 将包含结构 ComponentX。有关更多信息,请参阅 polyml.org/documentation/Reference/PolyMLMake.html or a 关于 Poly/ML 嵌套目录结构。
我目前正在用标准 ML 构建一个测试库(使用 Poly/ML 作为解释器)。我有以下目录结构:
project/a.sml
project/src/b.sml
project/src/c.sml
...
其中 a.sml
只是一堆要使用的调用
use "src/b.sml"
use "src/c.sml"
...
b.sml
,c.sml
等都是这样的结构定义
structure ComponentX
struct
...
end
它们构成了很好的、逻辑上独立的库组件。我有时也会在一个文件中创建一个模块,然后在另一个文件中的同一模块中引入子结构。
然后我可以通过调用 use "a.sml"
.
但是,我好像不能使用自己目录之外的代码,这有点问题。例如,假设我在 project
的父目录中。如果我随后调用 use "project/a.sml"
,随后对 use "src/x.sml"
的调用将尝试在父目录(不存在)中找到 src
目录。
有没有什么方法可以做一个相对的use
,或者有没有更好的方法来构建它?
Poly/ML 中的 use
函数本身在递归使用时不会更改路径。您将需要使用 OS.FileSys.chDir
显式更改子目录中的路径。 use
只是一个函数,因此您可以根据需要重新定义它。 OS.Path
和 OS.FileSys
结构可能很有用。
另一种方法是重新组织您的代码以利用 PolyML.make
。您必须重命名文件以匹配每个文件包含的结构名称,例如ComponentX.sml 将包含结构 ComponentX。有关更多信息,请参阅 polyml.org/documentation/Reference/PolyMLMake.html or a