Looking for ruby Keywords? Try Ask4Keywords

Ruby LanguageBlocs et Procs et Lambdas


Syntaxe

  • Proc.new ( bloc )
  • lambda {| args | code}
  • -> (arg1, arg2) {code}
  • object.to_proc
  • {| single_arg | code}
  • do | arg, (clé, valeur) | fin du code

Remarques

Faites attention à la priorité des opérateurs lorsque vous avez une ligne avec plusieurs méthodes enchaînées, comme:

str = "abcdefg"
puts str.gsub(/./) do |match|
  rand(2).zero? ? match.upcase : match.downcase
end

Au lieu d'imprimer quelque chose comme abCDeFg , comme on pouvait s'y attendre, il imprime quelque chose comme #<Enumerator:0x00000000af42b28> - c'est parce que do ... end a priorité moindre que les méthodes, ce qui signifie que gsub ne voit que l' /./ arguments , et non l'argument de bloc. Il retourne un énumérateur. Le bloc finit par passer à puts , qui l'ignore et affiche simplement le résultat de gsub(/./) .

Pour résoudre ce problème, gsub appel gsub entre parenthèses ou utilisez plutôt { ... } .

Blocs et Procs et Lambdas Exemples Liés