我不确定我是否问对了问题。我可能错误地解决了这个问题,但基本上我在这里遇到了这种情况:
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成为符号的散列。所以我尝试了两种方法,这只能让我到达那里
方法 1:将配置文件设为 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则填充