pry(main)> s = {:a =>2, :d=>'foo', :x => ' ', :n => true, :z => nil}
=> {:a=>2, :d=>"foo"}
pry(main)> s.each do |k,v| p k unless v.empty? end
NoMethodError: undefined method `length' for 2:Fixnum
我理解这是因为fixnum没有空方法。那么如何以 slick 的方式解决这个问题,首先找不到讨厌的数据类型,然后检查它?我想打印那些k
v
有值的true
。是{{1}}被视为一个值,但不是一堆空格。对我来说,有价值"表示非空字符,布尔值为true。
答案 0 :(得分:1)
快速解决方案:
s.each {|k,v| p k unless v.to_s.empty?}
答案 1 :(得分:1)
根据您更新的评论,我认为这就是您想要的。
s = {:a =>2, :d=>'foo', :x => ' ', :n => true, :z => nil}
s.each { |k,v| p(k) if !!v && !v.to_s.strip.empty? }
# :n
# :d
# :a