0
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 没有空方法。那么如何以一种巧妙的方式解决这个问题,而不是先找到数据类型然后检查它呢?我想打印那些k有价值v的东西。Yestrue被认为是一个值,但不是一堆空格。对我来说,“有价值”是指非空字符和布尔值。

4

2 回答 2

1

快速解决方案:

s.each {|k,v| p k unless v.to_s.empty?}
于 2012-12-06T02:06:45.780 回答
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
于 2012-12-06T04:10:40.283 回答