コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

Rails(ActiveSupport)の blank? は false も trueになる

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 である FalseClassempty? を持たない。

FalseClass.method_defined?(:empty?)
#=> false

そのため、結果は !false で trueになる。

参考リンク