【发布时间】:2010-12-21 16:25:08
【问题描述】:
考虑一个存储在哈希中的“人”。两个例子是:
fred = {:person => {:name => "Fred", :spouse => "Wilma", :children => {:child => {:name => "Pebbles"}}}}
slate = {:person => {:name => "Mr. Slate", :spouse => "Mrs. Slate"}}
如果“person”没有任何子元素,则“children”元素不存在。所以,对于 Slate 先生,我们可以检查他是否有父母:
slate_has_children = !slate[:person][:children].nil?
那么,如果我们不知道“slate”是“person”哈希怎么办?考虑:
dino = {:pet => {:name => "Dino"}}
我们不能再轻易地检查孩子了:
dino_has_children = !dino[:person][:children].nil?
NoMethodError: undefined method `[]' for nil:NilClass
那么,您将如何检查哈希的结构,尤其是如果它嵌套很深(甚至比此处提供的示例更深)?也许更好的问题是:“Ruby 方式”是什么?
【问题讨论】:
-
您没有为此实现对象模型或至少使用验证方法修饰某些结构的任何原因。我认为你会在尝试将语义添加到哈希中时让自己发疯。
-
即使您有一个对象模型,有时您也需要从哈希中提取数据来填充您的模型。例如,如果您从 JSON 流中获取数据。
标签: ruby hash coding-style