accolades définissent une fonction anonyme, appelée un bloc. Les jetons entre les tuyaux sont les arguments de ce bloc. Le nombre d'arguments requis dépend de la façon dont le bloc est utilisé. Chaque fois que le bloc est évalué, la méthode nécessitant le bloc transmettra une valeur basée sur l'objet qui l'appelle.
Cela revient à définir une méthode, mais elle n'est pas stockée au-delà de la méthode qui accepte un bloc.
Par exemple:
def my_print(i)
puts i
end
fera la même chose que quand exécuté:
{|i| puts i}
la seule différence est le bloc est défini à la volée et ne sont pas stockées.
Exemple 2: Les déclarations suivantes sont équivalentes
25.times &method(:my_print)
25.times {|i| puts i}
Nous utilisons des blocs anonymes parce que la majorité des fonctions passées en un bloc sont généralement spécifiques à votre situation et ne vaut pas la définition de la réutilisation.
Alors, que se passe-t-il lorsqu'une méthode accepte un bloc? Cela dépend de la méthode.Les méthodes qui acceptent un bloc l'appellent en passant des valeurs de leur objet appelant d'une manière bien définie. Ce qui est retourné dépend de la méthode nécessitant le bloc. Par exemple: En 25.times {|i| puts i}
.times appelle le bloc une fois pour chaque valeur comprise entre 0 et la valeur de son appelant, en passant la valeur dans le bloc comme variable temporaire i. Times renvoie la valeur de l'objet appelant. Dans ce cas 25.
Regardons la méthode qui accepte un bloc avec deux arguments.
{:key1 => "value1", :key2 => "value2"}.each {|key,value|
puts "This key is: #{key}. Its value is #{value}"
}
Dans ce cas, chacun appelle les séquences de chaque paire clé/valeur passage de la clé comme premier argument et la valeur que le second argument.
Question connexe: http://stackoverflow.com/questions/665576/what-are-those-pipe-symbols-for-in-ruby –