Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Имена, пакеты, use

Имена. Зарезервированные слова

Зарезервированные слова нельзя указывать в качестве идентификаторов напрямую.

  • _
  • as
  • case
  • def
  • else
  • fix
  • if
  • index
  • new
  • object
  • package
  • return
  • this - нельзя использовать в качестве имени переменной
  • unit
  • use
  • var

Но допускается использование зарезервированных слов в качестве идентификаторов при помощи обратных кавычек (кроме отдельных отмеченных выше случаев).

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/projectorg/example/test/project

Использование префиксов

Можно использовать только локальные имена сущностей из пакета, но тогда разрешение имени будет происходить по некоторому алгоритму поиска сущности.

Если нужно указать точное имя сущности, то можно использовать составное имя с префиксом, указанным (автоматически или вручную) при use. Тогда будет использоваться сущность, которая стоит за получаемым полным именем:

use org/example/test as t

t/name // сущность с именем name из пакета org/example/test