2013-07-01 18 views
7

voglio avere questo test:Ruby: vuoto? senza Rails

if (line.blank?) do_stuff 

... ma sono in Ruby diritto, non rotaie. Qual è l'idioma accettato per ottenere lo stesso effetto?

Lo sto facendo per una stringa, dove testare per .empty? non è lo stesso di test per .blank? (Una stringa di tutti gli spazi vuoti non è vuota, ma è vuota.)

+1

Dai un'occhiata alla fonte. https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/object/blank.rb – Kyle

+0

Grazie, Kyle. Trovato sotto String lì. Ti dispiacerebbe aggiungere questa risposta qui sotto, quindi posso accettarlo? (Sfortunatamente entrambe le risposte offerte finora non sono corrette, nel contesto di una stringa, dove una riga con tutti gli spazi bianchi è ancora testata come non vuota.) La definizione delle rotaie è giusta: def blank? auto! ~/[^ [: Spazio:]]/ fine – baudot

risposta

7

Da ActiveSupport

line !~ /[^[:space:]]/ 
+1

Is '/ [^ [: space:]] /' diverso da '/ \ S /'? Mi chiedo perché Rails ha fatto il primo modo. – sawa

+0

@sawa Il [docs] (http://www.ruby-doc.org/core-1.9.3/Regexp.html) lo menziona includendo '[: blank:]' che è un controllo per i caratteri di tabulazione. Contiene anche controlli per newline e ritorni a capo. Forse è questo il motivo. – Kyle

+0

È lo stesso per '/ \ s /'. – sawa

1

blank? essenzialmente solo controlli empty? || nil?. In questo modo puoi rendere tu stesso il metodo vuoto o controllarli entrambi nei tuoi condizionali.

1
if line.empty? || line.nil? 

Vuoto in un vuoto? metodo nella vostra linea classe

4

Questo è possibile:

line.to_s.strip.empty? 
+0

risposta migliore, funziona in tutti i casi – athospy

8

blank? non è solo definito nella stringa, è anche parte del Nil, perché è un test doppio. Controlla se una variabile è o nil? o empty?/spazio bianco.

Non è possibile chiedere una stringa se è nullo perché non ha un metodo nil?, ma è possibile chiedere un nullo se è nil?.

Active Support dispone di estensioni di base disponibili che consentono di selezionare le funzionalità necessarie e includere i metodi necessari. Per blank? si può fare:

require 'active_support/core_ext/object/blank' 

Vedere la blank? per ulteriori informazioni e leggere l'intero documento per vedere che altro è disponibile. L'utilizzo di Active Support in questo modo rimuove la necessità di caricare tutto AS ma ottenere funzionalità utili.