43 votes

Comment s'assurer fonctionne en rubis

vérifier ce code et la sortie

 def lab
  yield
  ensure
    puts 'in ensure block'
    true
end

puts lab { puts 'inside inline block'; false }

output is
#inside inline block
#in ensure block
#false
 

Je m'attendais à ce que, une fois le bloc exécuté, alors assurez-vous qu'il le soit et, puisque cette valeur renvoie true, le résultat final de l'appel de la méthode est 'true'.

69voto

Ken Bloom Points 27197

La valeur renvoyée par le bloc Ensure est ignorée. Il s'agit simplement d'un moyen de nettoyer après que la fonction a fait ce qu'elle est supposée faire (et renvoie la valeur appropriée). La raison en est qu’elle vous permet de placer plusieurs instructions return (ou raise ) à différents endroits du corps de la fonction, sans avoir à dupliquer le code de nettoyage à différents endroits de la fonction.

13voto

mikej Points 30224

Consultez ce billet de blog pour obtenir un aperçu du comportement de ensure avec les rendements implicites et explicites.

0voto

Yoann Le Touche Points 1027

On dirait que vous devez explicitement renvoyer true, ensure risque de ne pas renvoyer automatiquement la dernière valeur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X