Railsガイドにも乗ってますが、改めてコードを掘り下げて挙動を見る。
環境
$ bin/rails -v Rails 6.0.3.1
挙動
a = true a.blank? #=> false a = "" a.blank? # => true a = false a.blank? # => true
ソースコードから読む
かなり明快
def blank? respond_to?(:empty?) ? !!empty? : !self end
rails/blank.rb at master · rails/rails · GitHub
empty?
を持つオブジェクトであれば empty?
の結果を !!
を用いて 完全にtureか、falseのどちらかに変換する。持っていない場合は自分自身にnot演算子をかけた結果を返す。
false
である FalseClass
は empty?
を持たない。
FalseClass.method_defined?(:empty?) #=> false
そのため、結果は !false
で trueになる。