我有一个散列,可能包含也可能不包含某个键的值。如果是,我想转换该值并将转换后的值分配给属性。如果没有,我想将属性设置为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
。)
答案 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)