ruby-on-rails - que - ruby on rails tutorial
Una explicación concisa de nil v. Empty v. Blank en Ruby on Rails (14)
¿Me encuentro repetidamente buscando una definición clara de las diferencias de nil?
en blank?
y empty?
en Ruby sobre rieles. Aquí está lo más cerca que he venido:
blank?
los objetos son falsos, vacíos o una cadena de espacios en blanco. Por ejemplo,""
," "
,nil
,[]
y{}
están en blanco.nil?
Los objetos son instancias de NilClass.empty?
los objetos son específicos de cada clase, y la definición varía de una clase a otra. Una cadena está vacía si no tiene caracteres, y una matriz está vacía si no contiene elementos.
¿Hay algo que falta, o una comparación más estricta que se pueda hacer?
Hice esta tabla útil con todos los casos:
blank?
, present?
son proporcionados por Rails.
No te olvides de any?
¿cuál es generalmente !empty?
. En Rails, por lo general, verifico la presencia de algo al final de una declaración con if something
o, a unless something
luego use en blank?
Donde sea necesario ya que parece funcionar en todas partes.
Rieles 4
una alternativa a ''Array gotcha: blank?'' de @ corban-brook '' para comprobar si una matriz solo contiene valores vacíos y se puede considerar en blanco? cierto:
[ nil, '''' ].all? &:blank? == true
También se podría hacer:
[nil, '''', "", " ",'' ''].reject(&:blank?).blank? == true
Sólo una pequeña nota sobre el any?
recomendación: tiene razón en que generalmente es equivalente a !empty?
. Sin embargo, any?
devolverá true
a una cadena de solo espacios en blanco (ala " "
).
Y, por supuesto, ver el comentario 1.9 anterior, también.
Todos los demás han explicado bien cuál es la diferencia.
Me gustaría agregar en Ruby On Rails, es mejor usar obj.blank?
u obj.present?
en lugar de obj.nil?
o obj.empty?
.
obj.blank?
maneja todos los tipos nil
, ''''
, []
, {}
y devuelve true
si los valores no están disponibles y devuelve false
si los valores están disponibles en cualquier tipo de objeto.
Un caso especial es cuando se intenta evaluar si un valor booleano es nulo:
false.present? == false
false.blank? == true
false.nil? == false
En este caso la recomendación sería utilizar .nil?
Una diferencia es que .nil?
y .empty?
¿Son los métodos proporcionados por el lenguaje de programación Ruby, mientras que .blank?
Es algo que added el framework de desarrollo web Rails.
!obj.blank? == obj.present?
rápido !obj.blank? == obj.present?
!obj.blank? == obj.present?
Puede ser práctico / fácil para los ojos en algunas expresiones
.nil?
se puede usar en cualquier objeto y es verdadero si el objeto es nulo.
.empty?
se puede utilizar en cadenas, matrices y hashes y devuelve true si:
- Longitud de la cuerda == 0
- Longitud de la matriz == 0
- Longitud de hash == 0
Corriendo .empty?
en algo que es nil lanzará un NoMethodError
.
Ahí es donde .blank?
entra. Es implementado por Rails y operará en cualquier objeto, así como en trabajos como .empty?
Sobre cuerdas, matrices y hashes.
nil.blank? == true
false.blank? == true
[].blank? == true
{}.blank? == true
"".blank? == true
5.blank? == false
0.blank? == false
.blank?
también evalúa true en cadenas que no están vacías pero que solo contienen espacios en blanco:
" ".blank? == true
" ".empty? == false
Rails también proporciona .present?
, que devuelve la negación de .blank?
.
Array gotcha: en blank?
devolverá false
incluso si todos los elementos de una matriz están en blanco. Para determinar el vacío en este caso, use all?
con blank?
, por ejemplo:
[ nil, '''' ].blank? == false
[ nil, '''' ].all? &:blank? == true
exists?
Este método se puede usar para verificar si los datos existen en la base de datos o no. Devuelve valores booleanos ya sea true
o false
.
nil?
Puede ser utilizado en cualquier objeto. Determina si el objeto tiene algún valor o no, incluidos los valores "en blanco".
Por ejemplo:
example = nil
example.nil? # true
"".nil? # false
Básicamente nil?
solo devolverá verdadero si el objeto es de hecho igual a ''nil''.
empty?
Sólo se invoca en los objetos que se consideran una colección. Esto incluye cosas como cadenas (una colección de caracteres), hashes (una colección de pares clave / valor) y matrices (una colección de objetos arbitrarios). empty?
devuelve true si no hay elementos en la colección.
Por ejemplo:
"".empty? # true
"hi".empty? # false
{}.empty? # true
{"" => ""}.empty? # false
[].empty? # true
[nil].empty? # false
nil.empty? # NoMethodError: undefined method `empty?'' for nil:NilClass
Tenga en cuenta que empty?
no se puede llamar en objetos nulos, ya que los objetos nulos no son una colección y generará una excepción.
También tenga en cuenta que incluso si los elementos de una colección están en blanco, no significa que una colección esté vacía.
blank?
¿Es básicamente una combinación de nil?
y empty?
Es útil para verificar los objetos que usted asume que son colecciones, pero también podría ser nulo.
nil?
es un método estándar de Ruby que se puede llamar en todos los objetos y devuelve true
si el objeto es nil
:
b = nil
b.nil? # => true
empty?
es un método estándar de Ruby que se puede llamar en algunos objetos como cadenas, matrices y hash y devuelve true
si estos objetos no contienen ningún elemento:
a = []
a.empty? # => true
b = ["2","4"]
b.empty? # => false
empty?
No se puede llamar sobre objetos nil
.
blank?
es un método de Rails que puede nil
objetos nil
así como en objetos vacíos.