Moduł w Verse jest niepodzielną jednostką kodu, którą można wielokrotnie rozprowadzać i tworzyć od niej zależności, a z czasem ją rozwijać bez przerywania zależności. Moduł można zaimportować do swojego pliku Verse, aby móc wykorzystać definicje kodu z innych plików Verse.
Moduł Verse jest określony za pomocą folderu w hierarchii plików projektu, a nazwa modułu odpowiada nazwie folderu. Wszystkie pliki .verse znajdujące się w tym samym folderze co ten plik są częścią modułu Verse i mają dostęp do definicji z innych plików Verse w module bez konieczności bezpośredniego importowania modułu.
Do identyfikacji modułu służy ścieżka, na przykład /Verse.org/Verse. Ścieżki w Verse tworzą globalną przestrzeń nazw do identyfikacji elementów i bazują na koncepcji domen sieci web. Ścieżki te są trwałe i unikalne, a każdy programista Verse może je odkrywać.
Listę istniejących modułów Verse zawiera sekcja Odwołania do interfejsu API Verse.
Importowanie definicji z innych plików Verse
Aby móc korzystać z zawartości modułu Verse, trzeba zaimportować moduł za pomocą jego ścieżki. Poniższy kod pozwala na przykład zaimportować moduł Random identyfikowany za pomocą ścieżki /Verse.org/Random:
using { /Verse.org/Random }
W przypadku importowania modułu Math do pliku Verse można wykorzystać definicje jego kodu, takie jak funkcja GetRandomInt()
.
Widoczność definicji w module
Widoczność modułu i jego zawartości z innych plików Verse ustawia się za pomocą specyfikatorów widoczności, takich jak public
i internal
.
Domyślne ustawienie widoczności definicji to internal, co oznacza, że są one wykrywalne tylko w obrębie własnego modułu.
Definicja w pliku
Oprócz modułów wprowadzanych za pomocą folderów w projekcie, moduły można wprowadzić w pliku .verse przy użyciu następującej składni:
module1 := module:
...
Podobnie jak w przypadku klas i funkcji, obsługiwana jest również składnia z nawiasami:
module2 := module
{
...
}
Definicja modułu może zawierać specyfikatory widoczności. Na przykład:
module3<public> := module:
...
Domyślny dostęp modułu zdefiniowanego w ten sposób jest zgodny z dostępem modułów wprowadzonych za pomocą folderu: internal
.
Moduł zdefiniowany w pliku Verse może zawierać dowolną zawartość znajdującą się na najwyższym poziomie pliku .verse. Mogą to być definicje funkcji, definicje stałych, definicje różnych typów, a także inne definicje modułów. Na przykład:
module1 := module:
module2<public> := module:
class1<public> := class {}
class2<public> := class{}
Odwołania do zawartości modułu można tworzyć za pomocą nazwy rozdzielonej kropkami. Na przykład odwołanie do klasy class1
poza modułem module1
może przybierać postać module1.module2.class1
.