web-dev-qa-db-fra.com

Test de chaîne vide ou nulle

J'essaie de définir une variable conditionnellement en Ruby. Je dois le définir si la variable est nil ou vide (chaîne de longueur 0). Je suis venu avec ce qui suit:

variable = id if variable.nil? || (!variable.nil? && variable.empty?)

Bien que cela fonctionne, cela ne me semble pas très semblable à Ruby. Est-ce une façon plus succincte d’exprimer ce qui précède?

83
Richard Brown

La deuxième clause n'a pas besoin de cocher _!variable.nil?_: si l'évaluation atteint ce point, il est garanti que _variable.nil_ est faux (à cause de court-circuit ).

Cela devrait suffire:

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

Si vous travaillez avec Ruby sur Rails, Object.blank? résout ce problème:

Un objet est vide s'il est faux, vide ou une chaîne d'espacement. Par exemple, _""_, _" "_, nil, _[]_ et _{}_ sont tous vides.

170
Jon Gauthier

Si vous êtes dans Rails .blank? devrait être la méthode que vous recherchez:

a = nil
b = []
c = ""

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

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

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

Donc, la réponse serait:

variable = id if variable.blank?
52
Adrian Teh
variable = id if variable.to_s.empty?
23
sawa