OCaml - возможна отдельная компиляция класса (без внешнего модуля)?

В предыдущем заданном вопросе я узнал, что отдельный файл является принудительно модулем. Это, конечно, верно для определения класса в файле. У меня есть файл point.ml с точкой класса, скомпилирован и выполняется в верхнем плане:

# #load "point.cmo";;
# let p = new point (1,1);;
Error: Unbound class point
# let p = new Point.point (1,1);;
val p : Point.point = <obj>
# 
</obj>

Есть ли способ избавиться от внешнего модуля Point?

Принятое решение

Я спросил два раза, и, кажется, нет никакого способа создать автоматическое создание модуля для каждого файла. Поэтому нужно приспособиться к нему и либо открыть модуль, либо наилучшим образом использовать имя модуля и объекта, чтобы превратить это в функцию. Все еще есть псевдонимы модулей, и имя модуля объекта совершенно не имеет значения после создания экземпляра.

1 ответ

Вы можете открыть модуль:

# open Point;;

Он не избавляется от него, но открывает имена верхнего уровня для использования без квалификации по имени модуля.

Для быстрого тестирования вы также можете использовать #use для чтения исходного файла без создания модуля:

# use "point.ml";;

Высший уровень действует, как вы набрали весь файл.

Если у вас есть исходные файлы с именем apple.ml и orange.ml, которые определяют отдельные классы, вы можете просто назвать класс t в каждом файле. Из других модулей вы можете ссылаться на классы как Apple.t и Orange.t. Это хорошо сработало для меня. Если вы это сделаете, вы определенно не захотите открывать модули.

licensed under cc by-sa 3.0 with attribution.