Spec-Zone.ru › Crystal

Символ

Символ представляет уникальное имя во всём исходном коде.

Символы интерпретируются во время компиляции и не могут быть созданы динамически. Создать символ можно только с помощью символьного литерала, обозначаемого двоеточием (:), за которым следует идентификатор. Идентификатор при желании можно заключить в двойные кавычки (").

:unquoted_symbol
:"quoted symbol"
:"a" # identical to :a
:あ

Идентификатор в двойных кавычках может содержать любые символы Юникода, в том числе пробельные, и допускает те же escape-последовательности, что и строковый литерал, но без интерполяции.

Для идентификатора без кавычек действуют те же правила именования, что и для методов. Он может содержать буквенно-цифровые символы, подчёркивание (_) или символы с кодовой точкой выше 159(0x9F). Идентификатор не должен начинаться с цифры и может заканчиваться восклицательным знаком (!) или вопросительным знаком (?).

:question?
:exclamation!

Все операторы Crystal можно использовать в качестве имён символов без кавычек:

:+
:-
:*
:/
:%
:&
:|
:^
:**
:>>
:<<
:==
:!=
:<
:<=
:>
:>=
:<=>
:===
:[]
:[]?
:[]=
:!
:~
:!~
:=~

Внутренне символы реализованы как константы с числовым значением типа Int32.

Литерал массива символов с процентным обозначением

Помимо одиночного символьного литерала, существует также процентный литерал для создания массива символов. Он обозначается с помощью %i и пары разделителей. Допустимые разделители: круглые скобки (), квадратные скобки [], фигурные скобки {}, угловые скобки <> и вертикальные черты ||. За исключением вертикальных черт, все разделители могут быть вложенными; это означает, что открывающий разделитель внутри строки экранирует следующий закрывающий разделитель.

%i(foo bar baz)  # => [:foo, :bar, :baz]
%i(foo\nbar baz) # => [:"foo\nbar", :baz]
%i(foo(bar) baz) # => [:"foo(bar)", :baz]

Идентификаторы могут содержать любые символы Юникода. Отдельные символы разделяются одним пробелом (), который необходимо экранировать, чтобы использовать его как часть идентификатора.

%i(foo\ bar baz) # => [:"foo bar", :baz]

To the extent possible under law, the persons who contributed to this workhave waived
all copyright and related or neighboring rights to this workby associating CC0 with it.
https://crystal-lang.org/reference/1.2/syntax_and_semantics/literals/symbol.html

Spec-Zone.ru

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