我目前正在使用标准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
,还是有更好的方法来完全构建它?
答案 0 :(得分:4)
Poly / ML中的 std::cout << "This works!" << std::endl;
std::wcout << "This also works!" << std::endl;
函数本身在递归使用时不会改变路径。您需要使用use
显式更改子目录中的路径。 OS.FileSys.chDir
只是一个函数,所以你可以根据需要重新定义它。 use
和OS.Path
结构可能很有用。
另一种方法是重新组织代码以使用OS.FileSys
。您必须重命名文件以匹配每个文件包含的结构的名称,例如: ComponentX.sml将包含结构ComponentX。有关详情,请参阅polyml.org/documentation/Reference/PolyMLMake.html或this answer关于具有嵌套目录结构的Poly / ML。