session["test"]
現在、またはの両方を使用すると同じ値を返すセッション変数がありますsession[:test]
。これら2つは同じですか?どちらか一方を使用する方が良いですか?
ありがとう
session["test"]
現在、またはの両方を使用すると同じ値を返すセッション変数がありますsession[:test]
。これら2つは同じですか?どちらか一方を使用する方が良いですか?
ありがとう
標準のRubyハッシュでは、それらは同じではありません(文字列と記号)
ただし、railsSessionHash
サブクラスはto_s
キーを格納する前に呼び出すため、すべてのキーは文字列として格納されます(シンボルを指定した場合でも)。
class SessionHash < Hash
def [](key)
load_for_read!
super(key.to_s)
end
def []=(key, value)
load_for_write!
super(key.to_s, value)
end
そのためsession[:test]
、session["test"]
railsでも同じ値が返されます。
ルビーの文字列と記号に関する限り、それらは同じではありません。
原則として、2番目の形式を使用する必要があります。記号は、そうでなければ文字列になるものを表すために使用されるものです。これは、文字列を複数回生成するために使用するスペースを節約しながら、わかりやすい名前を効率的に付ける方法です。
これは、文字列のようにシンボルを参照するたびに新しいインスタンスを作成しないことを意味します。シンボルは、説明している値を表すためのより良い方法です。
完全を期すために、後で表現が必要になった場合に、記号を文字列に簡単に変換できることを述べておきます。
もっと読みたい場合は、ルビーのシンボルをよく説明している長いブログ投稿がここにあります。それらは最適化であると言えば十分です。
つまり、ruby SessionHashはシンボルに対してto_sを呼び出すため、この場合はどちらの方法でも入力から文字列が生成されるため、どちらかを使用できます。
いいえ、まったく同じではありません。それらは同じことを達成する2つの方法です。
一般に、Rubyでは、記号の主な用途はキーです。記号は:these_things
です。ハッシュキーはそれらの典型的な使用法です...
{
:name => 'Mary',
:rank => 'Captain'
}
セッションキーも通常はシンボルです。
代わりに文字列を使用しても何も害はありませんが、記号の方が一般的です。