/ / Rubyの配列のようなメソッドによるハッシュ値へのアクセス - ruby​​、ruby-on-rails-3、hash

メソッド別にハッシュ値にアクセスする方法は、ruby-ruby、ruby-on-rails-3、hash

私はこのようなハッシュを持っています:

h = { "key1" => { "key2" => "value"}, "key3" => "value3"}

アクセスしようとすると h.key1 やらないでくれ h["key1"] そうなる。

しかし、セッションハッシュを使用すると、エラーにならずに次のコードを書くことができます。

@session = session["omniauth"]
@session.data

メソッドからキーにアクセスできるのはいつですか。

回答:

回答№1は4

あなたはできる のみ でハッシュ値にアクセスする h["key1"] method(他の修飾子を使わずに)

その理由 @session.data それはうまくいく @session のインスタンスではありません Hashしかし、そのインスタンス OmniAuth::AuthHash これは、値にアクセスするための両方の方法をサポートします。

したがって、それはあなたが扱っているオブジェクトのタイプに依存します。


回答№2の場合は3

OpenStructの助けを借りてドット表記でハッシュキーにアクセスすることができます。

require "ostruct"
h = { "key1" => { "key2" => "value"}, "key3" => "value3"}
open_struct = OpenStruct.new(h)
p open_struct.key1

あなたの問題を解決するのに役立つことを願っています


回答№3の場合は1

セッションオブジェクトからKey-Valueにアクセスできるのは、誰かがメソッドを定義したからです。 [] その上に。

ハッシュでh.key1にアクセスしたい場合は、OpenStructを使用してください。

h = OpenStruct({ "key1" => { "key2" => "value"}, "key3" => "value3"})

これにより、以下の結果が返されます。

h.key1 # { "key2" => "value }
h.key3 # "value3"