シンボル¶
シンボルは、ソースコード全体で一意の名前を表します。
シンボルはコンパイル時に解釈され、動的に作成することはできません。シンボルを作成する唯一の方法は、コロン(:
)の後に識別子を付けたシンボルリテラルを使用することです。識別子は、オプションで二重引用符("
)で囲むことができます。
:unquoted_symbol
:"quoted symbol"
:"a" # identical to :a
:あ
二重引用符で囲まれた識別子には、空白を含む任意のUnicode文字を含めることができ、文字列リテラルと同じエスケープシーケンスを受け入れますが、補間はできません。
引用符で囲まれていない識別子の場合は、メソッドと同じ命名規則が適用されます。英数字、アンダースコア(_
)、またはコードポイントが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]
識別子には、任意のUnicode文字を含めることができます。個々のシンボルは、単一のスペース文字で区切られます。スペース文字を識別子の一部として使用するには、エスケープする必要があります。
%i(foo\ bar baz) # => [:"foo bar", :baz]