避免两次检查哈希值的存在的快捷方式

时间:2015-08-27 23:52:44

标签: ruby

我有一个散列,可能包含也可能不包含某个键的值。如果是,我想转换该值并将转换后的值分配给属性。如果没有,我想将属性设置为nil(或保留未定义,在这种情况下具有相同的效果)。

是否有更简洁/惯用的替代代码?

@my_attr = some_xform(a_hash[:a_key]) if a_hash[:a_key]

我觉得应该有DRY替代方案,不需要提及:a_key两次(即,也不是has_key?[:a_key])。

(请注意,some_xform()是一种库方法,如果它获得nil,它会爆炸,在大多数情况下是期望的行为 - 我不想将它修补它以静默返回nil的{​​{1}}只是为了处理这种情况。也没有任何我可以传递的默认值会导致它返回nil。)

3 个答案:

答案 0 :(得分:2)

那会有用吗?

@my_attr = if (v = a_hash[:a_key]) then some_xform(v) end

答案 1 :(得分:1)

你可以这样做(虽然不考虑一些人的最佳做法):

@my_attr = some_xform(a_hash[:a_key]) rescue nil

答案 2 :(得分:1)

因为您显然不需要特别处理false

@my_attr = (v = a_hash[:a_key]) && some_xform(v)