Символ
Символ представляет уникальное имя во всём исходном коде.
Символы интерпретируются во время компиляции и не могут быть созданы динамически. Создать символ можно только с помощью символьного литерала, обозначаемого двоеточием (:), за которым следует идентификатор. Идентификатор при желании можно заключить в двойные кавычки (").
: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