我发现自己经常需要这样做,当我匆忙的时候,我会用条件语句把它包起来:
if !myhash.blank?
hash.each do |k,v|
do_something
end
end
或者:
myhash.map{|k,v| do_something} unless myhash.blank?
一定有更简洁的方法。
我发现自己经常需要这样做,当我匆忙的时候,我会用条件语句把它包起来:
if !myhash.blank?
hash.each do |k,v|
do_something
end
end
或者:
myhash.map{|k,v| do_something} unless myhash.blank?
一定有更简洁的方法。
我可能会选择以下两种方式之一:
(my_hash || {}).each do |k, v|
# something
end
my_hash ||= {}
my_hash.each do |k, v|
# something
end
my_hash
的原始值。 - toklandmy_hash.try(:each) do |key, value|
# code
end
try方法如果在nil
上调用,将返回nil
,或者如果接收器不响应该方法也会返回nil
。
hash && hash.each do |x|
# do something
end
但我觉得unless hash.nil?
更加表达清晰。
Hash(myhash).each {|k,v| # whatevs }
始终返回一个Hash
。 修改自: https://dev59.com/kmkw5IYBdhLWcg3w2-XH#18894072
irb测试:
# $ irb
# irb(main):001:0> Hash(myhash=nil).each {|k,v|}
# => {}
# irb(main):002:0> Hash(myhash={"a" => "b"}).each {|k,v|}
# => {"a"=>"b"}
hash = my_hash || default_hash
。这样每次引用my_hash
时就不需要条件语句了;只需要在第一次定义时加入条件语句即可。 - lwassinkif myhash
- toklandHash
,但得到了nil
,那么这是一个bug,正确的响应是修复bug,以便首先不会得到nil
,而不是绕过nil
!如果你“总是发现自己不得不这样做”,那么你有很多bug,你应该加强你的设计、开发、测试、代码审查和QA流程(最终,你的招聘流程,这样你就不会雇用那些一开始就写出这种愚蠢的bug的程序员)! - Jörg W Mittag