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はいtrueは値と見なされますが、一連のスペースとは見なされません。私にとって「価値がある」とは、空でない文字とブール値の真を意味します。

4

2 に答える 2

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 に答える
1

クイックソリューション:

s.each {|k,v| p k unless v.to_s.empty?}
于 2012-12-06T02:06:45.780 に答える