Модуль в Verse — это самостоятельный блок кода, который можно использовать в других местах, в том числе для создания зависимостей. Он также может изменяться без нарушения зависимостей. Модуль можно импортировать в свой файл Verse, чтобы использовать определения из других файлов Verse.
Модуль в Verse задаётся папкой в файловой системе проекта, а в качестве имени модуля используется имя соответствующей папки. Все файлы с расширением .verse, находящиеся в одной папке с файлом, являются частью модуля Verse и могут получать доступ к определениям из других файлов Verse данного модуля без необходимости его импорта вручную.
Модуль определяется с помощью пути, например /Verse.org/Verse. Пути в Verse предоставляют глобальное пространство имён для идентификации объектов, а их принцип работы схож с принципом веб-доменов. Пути являются постоянными и уникальными; доступ к ним может получить любой программист на Verse.
Список существующих модулей Verse представлен в Справочнике по API Verse.
Импорт определений из других файлов Verse
Чтобы использовать содержимое модуля Verse, необходимо импортировать модуль по его пути. Например, код ниже импортирует модуль Random, расположенный по пути /Verse.org/Random:
using { /Verse.org/Random }
После импорта модуля Math в файл Verse вы сможете использовать определения из этого модуля, к примеру функцию GetRandomInt()
.
Видимость определений в модуле
Видимость модуля и его содержимого из других файлов Verse задаётся при помощи спецификаторов видимости, таких как public
и internal
.
По умолчанию видимость определений задаётся спецификатором internal, то есть непосредственный доступ к ним имеется только внутри модуля.
Внутрифайловое определение
Помимо указания папок в проекте, доступ к модулям в файле .verse может осуществляться при помощи следующего синтаксиса:
module1 := module:
…
По аналогии с классами и функциями также возможно использование фигурных скобок:
module2 := module
{
…
}
Определение модуля может содержать спецификаторы видимости. Пример:
module3<public> := module:
…
Доступ по умолчанию для модуля, определённого таким образом, аналогичен модулям, к которым обращаются по папке: internal
.
Модуль, определённый в файле Verse, может содержать всё, что содержится на верхнем уровне файла .verse. Сюда относятся определения функций, определения констант, определения различных типов, а также определения других модулей. Пример:
module1 := module:
module2<public> := module:
class1<public> := class {}
class2<public> := class{}
К содержимому модуля можно обращаться, указав имя с точкой. К примеру к class1
можно обращаться за пределами module1
по имени module1.module2.class1
.