5

session["test"]現在、またはの両方を使用すると同じ値を返すセッション変数がありますsession[:test]。これら2つは同じですか?どちらか一方を使用する方が良いですか?

ありがとう

4

3 に答える 3

5

標準の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でも同じ値が返されます。

于 2012-04-24T23:54:41.507 に答える
1

ルビーの文字列と記号に関する限り、それらは同じではありません。

原則として、2番目の形式を使用する必要があります。記号は、そうでなければ文字列になるものを表すために使用されるものです。これは、文字列を複数回生成するために使用するスペースを節約しながら、わかりやすい名前を効率的に付ける方法です。

これは、文字列のようにシンボルを参照するたびに新しいインスタンスを作成しないことを意味します。シンボルは、説明している値を表すためのより良い方法です。

完全を期すために、後で表現が必要になった場合に、記号を文字列に簡単に変換できることを述べておきます。

もっと読みたい場合は、ルビーのシンボルをよく説明している長いブログ投稿がここにあります。それらは最適化であると言えば十分です。

つまり、ruby SessionHashはシンボルに対してto_sを呼び出すため、この場合はどちらの方法でも入力から文字列が生成されるため、どちらかを使用できます。

于 2012-04-24T23:35:01.603 に答える
1

いいえ、まったく同じではありません。それらは同じことを達成する2つの方法です。

一般に、Rubyでは、記号の主な用途はキーです。記号は:these_thingsです。ハッシュキーはそれらの典型的な使用法です...

{
  :name => 'Mary',
  :rank => 'Captain'
}

セッションキーも通常はシンボルです。

代わりに文字列を使用しても何も害はありませんが、記号の方が一般的です。

于 2012-04-24T23:38:57.113 に答える