在阵列通过以下方法VS像访问哈希值我有这样一个哈希:红宝石
h = { "key1" => { "key2" => "value"}, "key3" => "value3"}
如果我尝试访问h.key1
它不会让我,但如果我不h["key1"]
会的。
但是当我使用的会话散,我可以写下面的代码没有得到一个错误:
@session = session["omniauth"]
@session.data
我什么时候可以访问方法和钥匙时像一个数组?
在阵列通过以下方法VS像访问哈希值我有这样一个哈希:红宝石
h = { "key1" => { "key2" => "value"}, "key3" => "value3"}
如果我尝试访问h.key1
它不会让我,但如果我不h["key1"]
会的。
但是当我使用的会话散,我可以写下面的代码没有得到一个错误:
@session = session["omniauth"]
@session.data
我什么时候可以访问方法和钥匙时像一个数组?
您可以只有访问哈希值与h["key1"]
方法(不使用其他修饰符)。
之所以@session.data
作品是@session
不是Hash
一个实例,但它支持两种方法来访问值的的OmniAuth::AuthHash
实例。
所以它取决于你正在使用的对象的类型。
您可以通过点符号与OpenStruct
require 'ostruct'
h = { "key1" => { "key2" => "value"}, "key3" => "value3"}
open_struct = OpenStruct.new(h)
p open_struct.key1
的帮助下,我希望它可以帮助你解决你的问题
的原因,你可以从访问键值访问哈希键会话对象是有人已经定义了它的方法[]
。
如果你想在你的哈希访问h.key1,使用OpenStruct:
h = OpenStruct({ "key1" => { "key2" => "value"}, "key3" => "value3"})
这将返回以下结果:
h.key1 # { "key2" => "value }
h.key3 # "value3"
啊我还以为它是相同的。谢谢 –