2011-01-27 10 views
7

Rails docs tiene esta información para Object#blank?Rails Object # blank? frente a String # ¿vacío? confusión

Un objeto está en blanco si es falso, vacío, o una cadena de espacios en blanco. Por ejemplo, "", "", nil, [] y {} están en blanco.

Pero la fuente para ese método es la siguiente:

# File activesupport/lib/active_support/core_ext/object/blank.rb, line 12 
def blank? 
    respond_to?(:empty?) ? empty? : !self 
end 

Ahora, cuando abro la línea de comandos pequeño y práctico y tipo ruby -e 'p " ".empty?' devuelve falso. Eso significa que Rails debería decir que este es un valor en blanco cuando claramente no lo es. ¡Pero! Abro mi rails console y escribo " ".empty? y obtengo el falso como mi línea de comando recta anterior. Pero, escribo "" .blank? y me hago realidad, como Rails me promete.

¿Qué me falta para comprender cómo funciona el método blank? de Rails con el método empty? de String?

Respuesta

10

Rails es un poco complicado en la forma en que documenta su método blank?. Aunque Object#blank? afirma que también detecta cadenas de espacios en blanco, se implementa con String#blank? para manejar el caso de espacio en blanco y Object#blank? para capturar el caso genérico. (blank? se define en algunas otras clases, también, para ahorrar tiempo.)

activesupport/lib/active_support/core_ext/object/blank.rb, line 66:

class String 
    def blank? 
    self !~ /\S/ 
    end 
end 
+0

Ah, gracias! Tan pronto como SO me lo permita, marcaré el tuyo como respuesta. – jxpx777

Cuestiones relacionadas