Mi ritrovo a volte alla ricerca di una definizione chiara delle differenze di nil?
, blank?
e empty?
in Ruby on Rails. Ecco il più vicino che sono venuto:
blank?
gli oggetti sono falsi, vuoti o una stringa di spazi bianchi. Ad esempio,""
," "
,nil
,[]
, e{}
sono vuoti.nil?
gli oggetti sono istanze di NilClass.empty?
gli oggetti sono specifici della classe e la definizione varia da classe a classe. Una stringa è vuota se non ha caratteri e una matrice è vuota se non contiene elementi.
Manca qualcosa o si può fare un confronto più stretto?
:nil?
è definito su ::Kernel
e sovrascritto su ::NilClass
, mentre :empty?
è implementato separatamente su molte classi (in modo nativo su ::String
, ::Array
, ::Hash
, e non in modo nativo su altre classi come ::Set
da stdlib e ::ActiveRecord::Relation
da rotaie). Quindi :nil?
è disponibile in tutte le sottoclassi ::Object
e anche in ogni classe che include ::Kernel
da sola, dove :empty?
deve essere implementata o inclusa specificamente nelle tue classi.
nil
concetto, inizia qui .
[1] pry(main)> [].blank? => true
present?
. Questo perchéblank?
restituisce true per un array vuoto.