2013-04-13 10 views
69

Sto tentando di impostare una variabile in Ruby in modo condizionale. Devo impostarlo se la variabile è nil o vuota (stringa di lunghezza 0). Ho trovato il seguente:Test per stringa vuota o di valore zero

Mentre funziona, non sembra molto simile a Ruby per me. È il modo più succinto di esprimere quanto sopra?

+0

La "via Ruby" sarebbe quello di non entrare in uno stato in cui si dispone di una miscela di nils e vuoto stringhe. Se qualsiasi funzione sta ritornando, questi dati possono restituire un valore "vuoto", dovrebbe restituire 'nil', non' "" '. – meagar

risposta

140

La seconda clausola non ha bisogno di una verifica da parte di check-in, se la valutazione raggiunge il punto variable.nil è falsa (a causa di short-circuiting).

Questo dovrebbe essere sufficiente:

variable = id if variable.nil? || variable.empty? 

Se si lavora con Ruby on Rails, Object.blank? risolve questo problema esatto:

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

+4

Perfetto, questo è quello che mi serviva ('Object.blank'). Ruby and Rails mi stupisce sempre con le sue simpatie zen. Grazie! :) –

+0

Questa soluzione non funzionerebbe per 'variable = 3 p variabile = 5 se variabile.nil? || variable.empty? ' –

+1

Questo presuppone che @RichardBrown non inserisca accidentalmente un intero in quello che si aspetta essere una variabile stringa, sì. –

15
variable = id if variable.to_s.empty? 
40

Se siete in Rails .blank? dovrebbe essere il metodo che si sta cercando:

a = nil 
b = [] 
c = "" 

a.blank? #=> true 
b.blank? #=> true 
c.blank? #=> true 

d = "1" 
e = ["1"] 

d.blank? #=> false 
e.blank? #=> false 

Quindi la risposta sarebbe:

variable = id if variable.blank? 
Problemi correlati