8
votes

`var = quelque chose de sauvetage nil` comportement

in Ruby Vous pouvez écrire un sauvetage code> à la fin d'une affectation pour attraper les erreurs qui pourraient arriver. J'ai une fonction (ci-dessous: a_function_that_may_fail code>) où il est pratique de le laisser lancer une erreur si certaines conditions ne sont pas remplies. Le code suivant fonctionne bien xxx pré>

Cependant, j'aimerais avoir post ["légende"] non même définie si la fonction échoue. P>

Je sais que je peux faire: p>

begin
  post['Caption'] = a_function_that_may_fail
rescue
end


1 commentaires

La réécriture de la fonction n'est pas vraiment une option, sa recherche Nokogiri - essentiellement, je souhaite définir l'élément de hachage «légende» s'il existe un élément XML spécifique, mais de manière importante, ne le définissez pas si cet élément XML n'est pas là.


3 Réponses :


2
votes

Assurez-vous que votre méthode renvoie nil code> ou false code>: xxx pré>

Vous pouvez ensuite utiliser le modificateur IF pour vérifier la valeur de retour de votre méthode et attribuez la valeur uniquement si ce n'est pas nil code> ou false code>: p> xxx pré>

ou vous pouvez mettre en cache le retour Valeur de this_may_fail code> dans une variable locale Si vous n'aimez pas appeler la méthode deux fois pour la condition IF et l'affectation. P>

the_value = this_may_fail
post['Caption'] = the_value if the_value


0 commentaires

22
votes

Le problème est priorité. La solution la plus simple:

caption = a_function_that_may_fail rescue nil
post['Caption'] = caption unless caption.nil?


1 commentaires

(...) Rescue Nil n'est pas cet ésotérique, IMHO. C'est facile à lire aussi.



3
votes
post.store('Caption', a_function_that_may_fail) rescue nil

1 commentaires

Mignon, mais ne s'appliquera pas si au lieu de poster ['Légende'] = c'était local_var =. Je préfère beaucoup la solution "ésotérique" de Molf