2011-01-27 14 views
7

Rails docs hanno questa informazione per Object#blank?Oggetto rails # vuoto? vs. stringa # vuota? confusione

Un oggetto è vuoto se è falso, vuoto o una stringa spazi. Ad esempio, "", "", nil, [] e {} sono vuoti.

Ma la fonte per questo metodo è simile a questo:

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

Ora, quando ho aperto il mio piccolo pratico riga di comando e digitare ruby -e 'p " ".empty?' restituisce false. Ciò significa che Rails dovrebbe dire che questo è un valore vuoto quando chiaramente non lo è. Ma! Apro il mio rails console e digito " ".empty? e ottengo false come la mia precedente linea di comando diretta. Ma, digito "" .blank? e divento vero come Rails mi promette.

Cosa mi manca nel comprendere come il metodo blank? di Rails funziona con il metodo empty? di String?

risposta

10

Rails è piuttosto complicato nel modo in cui documenta il suo metodo blank?. Anche se Object#blank? afferma di rilevare anche stringhe di spazi vuoti, viene implementato con String#blank? per gestire il caso di spazi bianchi e Object#blank? per rilevare il caso generico. (blank? è definita su un paio di altre classi, anche, per risparmiare tempo.)

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

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

Ah, grazie! Appena SO mi lascerà segnerò il tuo come risposta. – jxpx777

Problemi correlati