Blocos de código são trechos do código delimitados por “{ }” ou “do … end” que podem ser passados como “parâmetros” para funções, podendo ser chamados dentro dela. Exemplo:
[3,4,5].each{ puts hello }
No exemplo acima, a função “each” varre o array executando o código entre as chaves para cada elemento, como um iterador. Nesse caso, imprimindo “hello” três vezes na tela. Um dos usos mais comuns de blocos de código é justamente iterar sobre os elementos de um array, que podem ser passados como parâmentro para o bloco:
[3,4,5].each{ |x| puts x }
Agora podemos usar o valor “x”, fornecido pela função, dentro do nosso bloco. Os blocos podem ter mais de um parâmetro, sendo separados por vírgula entre o par de barras verticais.
Para criar funções que possam receber blocos de códigos, basta colocar a instrução “yield” dentro do corpo da função. Cada vez que o yield é executado, ele executa o bloco associado. Para passar parâmetros, eles são colocados logo depois do yield. Exemplo:
def calc(a, b) yield a, b end calc(3,4){ |x,y| x*y}