in Ruby Vous pouvez écrire un Cependant, j'aimerais avoir post ["légende"] non même définie si la fonction échoue. P> Je sais que je peux faire: p> 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
begin
post['Caption'] = a_function_that_may_fail
rescue
end
3 Réponses :
Assurez-vous que votre méthode renvoie 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 ou vous pouvez mettre en cache le retour Valeur de nil code> ou
false code>:
nil code> ou
false code>: p>
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
Le problème est priorité. La solution la plus simple:
caption = a_function_that_may_fail rescue nil post['Caption'] = caption unless caption.nil?
(...) Rescue Nil n'est pas cet ésotérique, IMHO. C'est facile à lire aussi.
post.store('Caption', a_function_that_may_fail) rescue nil
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
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à.