Solución:
En Ruby, nil
en un objeto (una sola instancia de la clase NilClass
). Esto significa que se pueden invocar métodos. nil?
es un método estándar en Ruby que se puede invocar en todos objetos y devoluciones true
Para el nil
objeto y false
para cualquier otra cosa.
empty?
es un método estándar de Ruby en algunos objetos como Arrays, Hashes y Strings. Su comportamiento exacto dependerá del objeto específico, pero normalmente devuelve true
si el objeto no contiene elementos.
blank?
no es un método estándar de Ruby pero se agrega a todos objetos por raíles y devoluciones true
por nil
, false
, vacío o una cadena de espacios en blanco.
Porque empty?
no está definido para todos los objetos, obtendría un NoMethodError
si llamaste empty?
sobre nil
para evitar tener que escribir cosas como if x.nil? || x.empty?
Rails agrega el blank?
método.
Después de responder, encontré una pregunta anterior, “Cómo entender cero versus vacío versus blanco en Rails (y Ruby)”, por lo que también debe verificar las respuestas.
Sentirlo 😉
¿NULO?
nil.nil?
#=> true
[].nil?
#=> false
"".nil?
#=> false
" ".nil?
#=> false
¿VACÍO?
[].empty?
#=> true
nil.empty?
#=> undefined method
"".empty?
#=> true
" ".empty?
#=> false
¿BLANCO?
[].blank?
#=> true
nil.blank?
#=> true
"".blank?
#=> true
" ".blank?
#=> true
Cualquier variable de Ruby es un objeto, por lo que se puede desinicializar / desarmar (establecer en nil). nil?
El método devuelve verdadero si no está inicializado:
b = nil
b.nil? # true
b = 'string value'
b.nil? # false
Las matrices, cadenas y secuencias en Ruby no pueden contener datos, por lo que pueden estar vacías. los empty?
El método devuelve verdadero si es así:
array = []
array.empty? # true
array << 5 << 4 # [5, 4]
array.empty? # false
string = "" # empty line
string.empty? # true
blank?
es un método específico de Active Support (disponible en cualquier objeto) y está disponible en Ruby On Rails con Active Support. Devuelve verdadero si un objeto es nulo o está vacío.