如何查看多维哈希值是否在ruby中具有值?
发布时间:2020-12-17 02:14:25 所属栏目:百科 来源:网络整理
导读:目前我正在做以下事情,但我确信必须有更好的方法: def birthday_defined?(map) map map[:extra] map[:extra][:raw_info] map[:extra][:raw_info][:birthday]end 可能存在仅定义map [:extra]的情况,然后我将最终得到Nil异常错误导致map [:extra] [:raw_in
目前我正在做以下事情,但我确信必须有更好的方法:
def birthday_defined?(map) map && map[:extra] && map[:extra][:raw_info] && map[:extra][:raw_info][:birthday] end 可能存在仅定义map [:extra]的情况,然后我将最终得到Nil异常错误导致map [:extra] [:raw_info]如果我不使用上面检查的代码则不存在. 解决方法
如果您正在使用Rails,那么您可以使用
try (和
NilClass#try ):
value = map.try(:[],:extra).try(:[],:raw_info).try(:[],:birthday) 这看起来有点重复:它只是一遍又一遍地做同样的事情,同时将一步的结果输入下一步.该代码模式意味着我们有一个隐藏的注入: value = [:extra,:raw_info,:birthday].inject(map) { |h,k| h.try(:[],k) } 这种方法很好地概括了你想到的任何到地图的路径: path = [ :some,:path,:of,:keys,:we,:care,:about ] value = path.inject(map) { |h,k) } 然后你可以看看value.nil?. 当然,如果您不使用Rails,那么您需要替换尝试,但这并不困难. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |