web-dev-qa-db-ja.com

Rubyのシンボルとは何ですか?

Rubyの世界はまったく新しいので、シンボルの概念と少し混乱しています。シンボルと変数の違いは何ですか?なぜ変数を使用しないのですか?

ありがとう。

49
wassimans

変数とシンボルは別物です。変数はさまざまな種類のデータを指します。 Rubyでは、シンボルは変数というよりも文字列に似ています。

Rubyでは、文字列は変更可能ですが、記号は不変です。つまり、シンボルのコピーを1つだけ作成する必要があります。したがって、あなたが持っている場合

x = :my_str
y = :my_str

:my_strは一度だけ作成され、xyは同じメモリ領域を指します。一方、あなたが持っている場合

x = "my_str"
y = "my_str"

my_strを含む文字列が作成されますtwice、およびxyは異なるインスタンスを指します。

そのため、Rubyの列挙型や辞書(ハッシュ)のキーと同じように記号がよく使用されます。

74
mipadi

Ruby内のシンボルは基本的に実世界のシンボルと同じものです。何かを表現したり名前を付けたりするために使用されます。

シンボルは、ある種の状態を表すために非常によく使用されます。たとえば、

order.status = :canceled
order.status = :confirmed

シンボルをインスタント列挙型として見ることもできます。シンボルを定義する必要はなく、使用するだけです。 この記事はそれを非常に詳細に説明しています。

18
Jakub Arnold

通常、変数は文字列と混同される傾向がありますが、変数のように考えると理解できます。それは理解できます。このように考えてください:

ゲーム内のプレーヤーのステータスは数値で表されます。 1は生存、2は不明、3は死亡を意味します。これは簡単にシンボルに置き換えることができます。シンボルは:alive:unsureおよび:dead。これを行う代わりに、プレイヤーが生きているかどうかを確認するには:

if player_status == 1

あなたはこれを行うことができます:

if player_status == :alive

1
sirsnow