2012-06-14 19 views

Respuesta

52

En Ruby, nil en un objeto (una instancia única de la clase NilClass) por lo que se pueden invocar métodos sobre él. nil? es un método estándar en Ruby que se puede llamar en todos los objetos y devuelve true para el objeto nil y false para cualquier otra cosa.

empty? es un método estándar de Ruby en algunos objetos como Arrays, Hashes and Strings. Su comportamiento exacto dependerá del objeto específico, pero generalmente devuelve true si el objeto no contiene elementos.

blank? no es un método estándar de Ruby, pero se añade a todos los objetos por medio de carriles y devuelve true para nil, false, o una cadena vacía, espacio en blanco.

Debido empty? no está definida para todos los objetos que se obtendría un NoMethodError si se llama a empty? en nil lo que para evitar tener que escribir cosas como if x.nil? || x.empty? rieles agrega el método blank?.


Después de responder, me encontré con que this question has been asked before por lo que debe comprobar las respuestas a esta pregunta también.

22

Siéntalo;)

NIL?

nil.nil? 
#=> true 
[].nil? 
#=> false 
"".nil? 
#=> false 
" ".nil? 
#=> false 

EMPTY?

[].empty? 
#=> true 
nil.empty? 
#=> undefined method 
"".empty? 
#=> true 
" ".empty? 
#=> false 

BLANK?

[].blank? 
#=> true 
nil.blank? 
#=> true 
"".blank? 
#=> true 
" ".blank? 
#=> true 
10

Cualquier variable de ruby ​​es un objeto, por lo que se puede unir/desarmar (poner a cero). nil? método devuelve verdadero si no se ha inicializado

b = nil 
b.nil? # true 
b = 'string value' 
b.nil? # false 

matrices, cadenas, arroyos en Ruby puede contener ningún dato, por lo que puede estar vacío. El método empty? 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 ActiveSupport método específico (disponible en cualquier objeto) y está disponible en RubyOnRails con ActiveSupport. Devuelve verdadero si el objeto es nulo o está vacío.

+2

'blank?'si el método ActiveSupport – fl00r

+0

@ fl00r sí, tienes razón. voy a editar la respuesta – Ribtoks