J'ai une chaîne dans Ruby sur laquelle j'appelle la méthode strip afin de supprimer les espaces de début et de fin. par exemple.
s = "12345 "
s.strip
Cependant, si la chaîne est vide, j'obtiens l'erreur suivante.
NoMethodError: méthode non définie `strip 'pour nil: NilClass
J'utilise Ruby 1.9 alors quel est le moyen le plus simple de vérifier si la valeur est nulle avant d'appeler la méthode strip?
Mettre à jour:
J'ai essayé ceci sur un élément d'un tableau mais j'ai eu le même problème:
data[2][1][6].nil? ? data[2][1][6] : data[2][1][6].split(":")[1].strip
Ruby 2.3.0 a ajouté un opérateur de navigation safe (&.
) qui recherche la valeur nil avant d’appeler une méthode.
s&.strip
Il retournera nil
si s
est nil
, plutôt que de lever NoMethodError
.
Vous pouvez utiliser la méthode try
à partir de ActiveSupport (bibliothèque Rails)
gem install activesupport
require 'active_support/core_ext/object/try'
s.try(:strip)
ou vous pouvez utiliser ma gemme tryit qui donne des facilités supplémentaires:
gem install tryit
s.try { strip }
Si la création d'objet supplémentaire ne vous dérange pas, l'une ou l'autre de ces tâches fonctionne:
"#{s}".strip
s.to_s.strip
Sans objet supplémentaire:
s && s.strip
s.strip if s
Je suppose que la méthode la plus simple serait la suivante:
s.strip if s
ActiveSupport
vient avec une méthode pour cela: try
. Par exemple, an_object.try :strip
retournera nil
si an_object
est nul, mais procédera autrement. La syntaxe est la même que send
. Cf active_support_core_extensions.html # try .
Si vous voulez éviter l'erreur qui apparaît dans la question:
s.to_s.strip
Tout simplement:
s = s.nil? ? s : s.strip
Tl; dr Vérifiez si s est nul, puis retournez s, sinon, supprimez-le.