「Rubyシンボルについて」を読んだにもかかわらず、シンボルの使用に関しては、メモリ内のデータの表現にまだ混乱しています。2つが異なるオブジェクトに含まれているシンボルが同じメモリ位置に存在する場合、それらに異なる値が含まれているのはどうしてですか?同じメモリ位置に同じ値が含まれていると思っていました。
これはリンクからの引用です:
文字列とは異なり、同じ名前のシンボルは初期化され、rubyのセッション中に一度だけメモリに存在します
同じメモリ位置に含まれる値をどのように区別するのかわかりません。
この例を考えてみましょう。
patient1 = { :ruby => "red" }
patient2 = { :ruby => "programming" }
patient1.each_key {|key| puts key.object_id.to_s}
3918094
patient2.each_key {|key| puts key.object_id.to_s}
3918094
patient1
patient2
両方ともハッシュです、それは問題ありません。 :ruby
ただし、はシンボルです。以下を出力する場合:
patient1.each_key {|key| puts key.to_s}
では、何が出力されますか?"red"
、または"programming"
?
ハッシュを一瞬忘れて、シンボルは値へのポインタだと思います。私が持っている質問は次のとおりです。
- シンボルに値を割り当てることはできますか?
- シンボルは、値を含む変数への単なるポインターですか?
- シンボルがグローバルである場合、それはシンボルが常に1つのことを指していることを意味しますか?
puts patient1[:ruby]
「赤」、と言うとputs patient2[:ruby]
「プログラミング」と表示されます。