Ruby の nil とはなんぞや?
# 空オブジェクトではfalseになる irb(main):011:0> ary = [] irb(main):012:0> ary.nil? => false # nil を代入したらtrueになる irb(main):013:0> ary = nil irb(main):014:0> ary.nil? => true
aryは空オブジェクトではあるものの、入れ物自体は存在はしているため、nilではない。よってnil?
メソッドで判定するとfalseになる。「中身は空っぽでも、入れ物自体が存在したら、そのオブジェクトはnilではない」という意味。
一方、nilを代入したら当然nilになる。nil?
メソッドで判定するとtrueになる。この場合、2個目のaryは「存在しないよ。なにこれ?」と判定されている。
もうひとつの例
# 空文字列を入れた変数はfalseになる irb(main):015:0> str = "" irb(main):016:0> str.nil? => false # emptyは当然true irb(main):017:0> str.empty? => true
strに文字列は代入されていないが、これも入れ物自体は存在するため、nil?
メソッドで判定するとfalseになる。
ちなみに、str.empty?
で空なのかを確認するとtrueになる。文字列という入れ物を代入しているが、中身は空っぽなのでempty?
メソッドで判定するとtrueになるということ。
ちなみに、NilClassのオブジェクトにはempty?
メソッドは存在しない。
irb(main):021:0> hoge = nil irb(main):022:0> hoge.empty? NoMethodError (undefined method `empty?' for nil:NilClass)