我想替换哈希'具有特定默认值的零值:
hash = { a: 'populated', b: false, c: nil }
hash.map { |k, v| v || 'REPLACED BECAUSE NIL' }
#=> expected: ["populated", false, "REPLACED BECAUSE NIL"]
# got: ["populated", "REPLACED BECAUSE NIL", "REPLACED BECAUSE NIL"]
然而,问题是,我不想覆盖虚假。我想保持虚假,只会覆盖零。
我可以在一行中完成吗?
答案 0 :(得分:4)
您可以使用nil?
方法。
hash = { a: 'populated', b: false, c: nil }
hash.map { |k, v| v.nil? ? 'REPLACED BECAUSE NIL' : v }
# => ["populated", false, "REPLACED BECAUSE NIL"]
如文档中所述,只有对象nil
才会true
回复nil?
,因此您不会对假值有任何问题。
答案 1 :(得分:0)
您可以使用v == nil
测试nil&n。 Hash类还支持hash = Hash.new('Something')
的默认值:
hash = Hash.new 'llama'
hash[:blark]
#=> "llama"
或者你的方式
hash = { a: 'populated', b: false, c: nil }
hash.map { |k, v| v == nil ? 'REPLACED BECAUSE NIL' : v }