通过方法访问哈希值,比如在ruby中的数组中访问哈希值

时间:2013-09-23 10:27:59

标签: ruby ruby-on-rails-3 hash

我有这样的哈希:

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

如果我尝试访问h.key1,它就不会让我,但如果我h["key1"]它会。{/ p>

但是当我使用会话哈希时,我可以编写以下代码而不会出现错误:

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

我什么时候可以通过方法和类似数组来访问密钥?

3 个答案:

答案 0 :(得分:4)

您可以使用h["key1"]方法访问哈希值(不使用其他修饰符)。

@session.data的工作原因是@session不是Hash的实例,而是OmniAuth::AuthHash的实例,它支持两种访问值的方法。

所以它取决于你正在使用的对象的类型。

答案 1 :(得分:3)

您可以在OpenStruct的帮助下通过点表示法访问哈希键

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

我希望它可以帮助您解决问题

答案 2 :(得分:1)

您能够从会话对象访问键值的原因是有人在其上定义了方法[]

如果要在哈希上访问h.key1,请使用OpenStruct:

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

这将返回以下结果:

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