コンテンツにスキップ

シンボル

シンボルは、ソースコード全体で一意の名前を表します。

シンボルはコンパイル時に解釈され、動的に作成することはできません。シンボルを作成する唯一の方法は、コロン(:)の後に識別子を付けたシンボルリテラルを使用することです。識別子は、オプションで二重引用符(")で囲むことができます。

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

二重引用符で囲まれた識別子には、空白を含む任意のUnicode文字を含めることができ、文字列リテラルと同じエスケープシーケンスを受け入れますが、補間はできません。

引用符で囲まれていない識別子の場合は、メソッドと同じ命名規則が適用されます。英数字、アンダースコア(_)、またはコードポイントが1590x9F)を超える文字を含めることができます。数字で始めることはできず、感嘆符(!)または疑問符(?)で終わることができます。

: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]