Структурирование библиотеки в SML
В настоящее время я создаю тестовую библиотеку в Standard 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
, или есть лучший способ структурировать это в целом?
1 ответ
use
Сама функция в Poly/ML не меняет путь, когда она используется рекурсивно. Вам нужно будет явно изменить путь в подкаталоге, используя OS.FileSys.chDir
, use
это просто функция, чтобы вы могли переопределить ее, если хотите. OS.Path
а также OS.FileSys
структуры могут быть полезны.
Альтернативой является реорганизация вашего кода, чтобы использовать PolyML.make
, Вам нужно будет переименовать ваши файлы, чтобы они соответствовали названию структуры, содержащейся в каждом файле, например, ComponentX.sml будет содержать структуру ComponentX. Подробнее об этом см. http://polyml.org/documentation/Reference/PolyMLMake.html или ответ на этот вопрос о Poly/ML с вложенными структурами каталогов.