2017-05-22 6 views
0

は、私は、しかし、私は混乱を招くケースに気付いてる、 Rubyが私にプレゼントしてくれているのはなぜですか?値があるときはfalseですか?

arg.present? 

が真実と文字列が空またはゼロであったかどうかをチェックするために、光だと思いました。私の文字列の場合:

arg = "\t" 

私は間違って結果を得る:

2.4.0 :003 > arg = "\t" 
=> "\t" 
2.4.0 :004 > arg.present? 
=> false 

は私の文字列引数が空かnilであるかどうかを確認するために、より確実な方法は何ですか?確かに、私はarg.empty? || arg.nil?と書くことができましたが、私はより簡潔な方法を探していました。

+1

'to_s.empty? 'は動作しますか? –

答えて

7

so #present?#blank?と反対であり、#blank?は、 "オブジェクトが偽、空白または空白文字列の場合は空白です"と定義されています。

「\ tは」空白文字列(タブ)であり、したがって、それは#blank?であり、それは文字列の方法のため「\ tが」唯一のタブとして解釈されることに注意してください

#present?ではありませんが構築されている。

2.2.5 :001 > "\t".present? 
=> false 
2.2.5 :002 > '\t'.present? 
=> true 
+0

"" \ t "は、文字列の作成方法のためにタブとして解釈されるだけであることに注意してください。 "建設された"?エスケープ文字は一重引用符では無視され、二重引用符で囲まれます:http://ruby-doc.org/core-2.4.1/doc/syntax/literals_rdoc.html#label-Strings –

-1

私が読んで、おそらくActive Support's Core documentationの例で遊んでお勧めします。それは何の価値(またはコンテンツ)を持っていない、

require 'active_support/core_ext/object/blank' 

empty_str = '' 
tab = "\t" 
period = '.' 

empty_str.empty? # => true 
empty_str.present? # => false 
empty_str.blank? # => true 

空の文字列がempty?あるのでpresent?なることは何もありませんし、それはempty?をだから、それは、blank?です:

これは説明するのに役立つかもしれません。

tab.empty? # => false 
tab.present? # => false 
tab.blank? # => true 

tabそれがコンテンツを持っているのでempty?ではありませんが、それはpresent?ではありませんので、それが空白だと、それはblank?です。

period.empty? # => false 
period.present? # => true 
period.blank? # => false 

periodそれは空白ではありませんが、それはpresent?ですのでempty?blank?ではありません。

関連する問題