私はこのようなハッシュを持っています:
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"