在Ruby中是否有.?
运算符,它在调用对象之前检查对象是否为nil
?。? (存在)运营商在红宝石?
举例来说,如果我有代码:
if person and person.neighbor and person.neighbor.house and person.neighbor.house.rooms
person.neighbor.house.rooms.each do |room|
blah
end
end
难道还有比其如果检查做一个在任何事情上更好的办法?
请不要说“代码的方式,这些对象不会永远是nil
”,我从API调用中获取这些东西,并且无法控制它。
的[得墨忒耳定律(http://en.wikipedia.org/wiki/Law_of_Demeter)可能是有趣的你,因为你的代码侵犯了它严重。 – 2012-03-12 00:05:20
可能重复的[有没有对红宝石Groovy的链式属性的等效零预防?](http://stackoverflow.com/questions/8805582/is-there-an-equivalent-null-prevention-on-chained-attributes在Groovy-in-ruby) – 2012-03-12 00:06:54
@AndrewMarshal,我绝对同意。然而,我想不出一个好的方法来跟踪我的情况下的LoD。我基本上是对第三方认证平台(即facebook twitter等)进行API调用,并获取一个巨大的嵌套信息对象。在这个范围内,我只想抓取一块信息(特别是用户的教育历史),这个信息深深嵌套。除非我写出5种不同的方法,每种方法只能对其后代进行调用,否则我不得不违反LoD。也许有更好的方法? – 2012-03-12 00:12:44