Имена, пакеты, use
Имена. Зарезервированные слова
Зарезервированные слова нельзя указывать в качестве идентификаторов напрямую.
_ascasedefelsefixifindexnewobjectpackagereturnthis- нельзя использовать в качестве имени переменнойunitusevar
Но допускается использование зарезервированных слов в качестве идентификаторов при помощи обратных кавычек (кроме отдельных отмеченных выше случаев).
fix `new` = 123
Если зарезервированное имя является частью имени с префиксом, то заключается в обратные кавычки только локальная часть:
println: lib/`new`
Пакеты: package и use
Модульность обеспечивается использованием пакетов, которые образуют пространство имен и участвуют в алгоритме разрешения имен.
Имя определяемого пакета задается при помощи package, которых в одном исходном тексте может быть несколько. Соответственно, один исходный текст может содержать несколько пакетов внутри.
Если package не указан, то считается package _default
При помощи use можно получить доступ до пакета из другого пакета. Прямой доступ до сущностей при помощи префикса.
use name as prefix
Префикс должен быть уникальным в рамках пакета, в котором он задается для использования.
Можно не указывать префикс, тогда в качестве префикса автоматически будет использоваться последняя часть полного имени пакета после /:
use libretto/util - равносильно use libretto/util as util
Все use распространяются на весь пакет, даже если один пакет определен в нескольких исходных текстах.
Исходный текст-1:
package org/example/test
use com/teacode/html
// здесь можно использовать префикс html
Исходный текст-2 того же проекта
package org/example/test
// здесь можно использовать префикс html,
// который определен в исходном тексте-1
Один и тот же пакет можно использовать через разные префиксы, определяя соответствующие use
use org/example/test
use org/example/test as t
use org/example/test as t2
test/name // эти
t/name // три варианта
t2/name // ссылаются на одну сущностью
По умолчанию доступен префикс libretto для доступа к пакету libretto, но можно дополнительно определить другой префикс
use libretto as l
def main = l/println("Hello!")
Имена пакетов
Имена пакетов формируются из локальных кусков, разделенных /. В качестве имени рекомендуется использовать url, где доменная часть записана в обратном порядке и с разделением /.
http://test.example.org/project ⇒ org/example/test/project
Использование префиксов
Можно использовать только локальные имена сущностей из пакета, но тогда разрешение имени будет происходить по некоторому алгоритму поиска сущности.
Если нужно указать точное имя сущности, то можно использовать составное имя с префиксом, указанным (автоматически или вручную) при use. Тогда будет использоваться сущность, которая стоит за получаемым полным именем:
use org/example/test as t
t/name // сущность с именем name из пакета org/example/test