Spec-Zone.ru › Elixir 1.6

Синтаксис Unicode

Elixir поддерживает Unicode на протяжении всего языка.

Цитируемые идентификаторы, такие как строки ("olá") и списки символов ('olá'), поддерживают Unicode начиная с Elixir v1.0. Строки закодированы в UTF-8. Списки символов представляют собой списки кодовых точек Unicode. В таких случаях содержимое сохраняется в том виде, в котором его ввели разработчики, без каких-либо преобразований.

Elixir также поддерживает Unicode в идентификаторах с Elixir v1.5, как определено в Приложении к Unicode #31. Целью данного документа является описание того, как Elixir реализует требования, изложенные в Приложении к Unicode. Эти требования обозначаются как R1, R6 и так далее.

Чтобы проверить версию Unicode вашей текущей установки Elixir, выполните String.Unicode.version().

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

Идентификаторы Elixir задаются как:

<Identifier> := <Start> <Continue>* <Ending>?

где <Start>:

символы, полученные из общей категории Unicode: заглавные буквы, строчные буквы, прописные буквы, модификаторы букв, другие буквы, числовые буквы, плюс Other_ID_Start, минус Pattern_Syntax и Pattern_White_Space кодовые точки

В нотации множества: [[:L:][:Nl:][:Other_ID_Start:]--[:Pattern_Syntax:]--[:Pattern_White_Space:]]

и <Continue>:

символы ID_Start, плюс символы, имеющие общую категорию Unicode: знаки без пробела, знаки пробела, десятичное число, знаки препинания, плюс Other_ID_Continue, минус Pattern_Syntax и Pattern_White_Space кодовые точки.

В нотации множества: [[:ID_Start:][:Mn:][:Mc:][:Nd:][:Pc:][:Other_ID_Continue:]--[:Pattern_Syntax:]--[:Pattern_White_Space:]]

<Ending> — дополнение, специфичное для Elixir, включающее кодовые точки ? (003F) и ! (0021).

Elixir также реализует требования R1a для безопасности и R1b для обратной совместимости.

Атомы

Атомы в Elixir следуют правилам идентификаторов выше с следующими изменениями:

  • <Start> включает кодовую точку _ (005F)
  • <Continue> включает кодовую точку @ (0040)

Переменные

Переменные в Elixir следуют правилам идентификаторов выше с следующими изменениями:

  • <Start> включает кодовую точку _ (005F)
  • <Start> не должно включать символы Lu (заглавные буквы) и Lt (прописные буквы)

R3. Символы Pattern_White_Space и Pattern_Syntax

Elixir поддерживает только кодовые точки \t (0009), \n (000A), \r (000D) и \s (0020) как пробелы и поэтому не следует требованию R3. Требование R3 требует поддержки более широкого набора символов пробелов и синтаксических символов.

R6. Отфильтрованные нормализованные идентификаторы

Идентификаторы в Elixir чувствительны к регистру.

Elixir требует, чтобы все атомы и переменные были в форме NFC. Любая другая форма приведет к ошибке с соответствующим сообщением. Однако цитируемые атомы и переменные могут быть в любой форме и не проверяются парсером.

Иными словами, атом :josé может быть записан только с кодовыми точками 006A 006F 0073 00E9. Использование другой формы нормализации приведет к ошибке токенизатора. С другой стороны, :"josé" может быть записан как 006A 006F 0073 00E9 или 006A 006F 0073 0065 0301, поскольку он записан в кавычках.

Выбор требования R6 автоматически исключает требования R4, R5 и R7.

© 2012 Plataformatec
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/elixir/1.6.6/unicode-syntax.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API