【发布时间】:2015-02-20 05:58:17
【问题描述】:
我不确定我是否问对了问题。我可能错误地处理了这个问题,但基本上我在这里遇到了这种情况:
obj = get_user(params)
obj.profile => {:name => "John D", :age => 40, :sex => "male"} #Has to be of class Hash
obj.profile.name => "John D"
obj.profile[:name] => "John D"
obj.profile.job => nil
所以基本上,我必须满足所有这些条件,我什至不知道如何解决这个问题(我今天刚刚学习了 Ruby)。
注意访问内部变量的点表示法,否则我只会让 profile 成为符号的散列。所以我尝试了两种方法,这只能让我到达那里
方法一:将profile设为OpenStruct
所以这允许我使用点符号访问姓名、年龄和性别,如果键不存在,它会自动返回 nil,但是 obj.profile 属于 类型OpenStruct 而不是 Hash
方法2:将配置文件设为自己的类
这样我将它们设置为实例变量,如果它们不存在,我可以使用 method_missing 返回 nil。但是,我又遇到了 obj.profile 不是正确的类型/类
我有什么遗漏吗?有没有办法区分
obj.profile
obj.profile.name
在 getter 函数中并返回哈希或其他?
我可以更改我的自定义类为配置文件返回的内容,因此它返回一个哈希值吗?
我什至尝试检查 obj.profile 的 get 函数中的 args 和 **kwargs,但它们似乎都没有帮助,或者如果我调用它们则填充obj.profile.something
【问题讨论】:
-
我认为
obj.profile => {:name => "John D", :age => 40, :sex => "male"}只意味着它必须返回一个看起来像哈希表示的表示。这并不一定意味着它必须是 Hash 的一个实例。以这种方式解释期望是错误的吗? -
提示说“返回一个符号化的哈希”,并且可以以完全相同的方式访问 OpenStruct。唯一的区别是它的类不一样......我会看看我解释它的方式是否可能。如果没有,那么我将使用 OpenStruct
标签: ruby-on-rails ruby class hash openstruct