我发现自己必须一直这样做,当我匆忙时,我将其包裹在一个条件中:
if !myhash.blank?
hash.each do |k,v|
do_something
end
end
或:
myhash.map{|k,v| do_something} unless myhash.blank?
必须有更清洁的东西。
答案 0 :(得分:7)
我倾向于使用to_h
隐藏"是hash.to_h.each do |k,v|
# something
end
"测试:
hash
如果hash.to_h
已经是哈希,则hash
为hash.nil?
,如果hash.to_h
则{ }
为array.to_a.each { |e| ... }
。
同样,我对数组使用to_a
:
nil
答案 1 :(得分:5)
我可能会这样做:
(my_hash || {}).each do |k, v|
# something
end
或者这个:
my_hash ||= {}
my_hash.each do |k, v|
# something
end
答案 2 :(得分:3)
答案 3 :(得分:3)
如果你想特别迭代,如果不是nil你可以做类似的事情
hash && hash.each do |x|
# do something
end
但我发现unless hash.nil?
更具表现力。
答案 4 :(得分:0)
Hash(myhash).each {|k,v| # whatevs }
始终返回Hash
。修改自:https://stackoverflow.com/a/18894072/1076207
irb test:
# $ irb
# irb(main):001:0> Hash(myhash=nil).each {|k,v|}
# => {}
# irb(main):002:0> Hash(myhash={"a" => "b"}).each {|k,v|}
# => {"a"=>"b"}