Spec-Zone.ru › Elixir 1.13

Синтаксис Unicode

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

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

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

Для проверки версии Unicode вашей текущей установки Elixir запустите String.Unicode.version().

R1. Стандартные идентификаторы

Общее правило идентификаторов Elixir задано как:

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

где <Start> использует те же категории, что и спецификация, но ограничивает их формой NFC (см. R6):

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

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

и <Continue> использует те же категории, что и спецификация, но ограничивает их формой NFC (см. R6):

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

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

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

Спецификация также предоставляет множество <Medial>, но Elixir не включает в него ни одного символа. Поэтому правило идентификаторов было упрощено.

Elixir не допускает использование ZWJ или ZWNJ в идентификаторах и поэтому не реализует R1a. R1b гарантирован для обеспечения обратной совместимости.

Атомы

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

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

Обратите внимание, что атомы также могут быть в кавычках, что позволяет использовать любые символы, такие как :"hello elixir". Все операторы Elixir также являются допустимыми атомами (:+, :@, :|>, и т. д.). Полное описание допустимых атомов доступно в "Раздел \"Атомы\" в справочнике по синтаксису".

Переменные

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

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

В нотации множества: [\u{005F}\p{Ll}\p{Lm}\p{Lo}\p{Nl}\p{Other_ID_Start}-\p{Pattern_Syntax}-\p{Pattern_White_Space}].

R3. Пробелы и символы синтаксиса шаблонов

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.13.4/unicode-syntax.html

Spec-Zone.ru

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