1
resposta

O que é esse & que ele coloca antes de "campo?

Por que ele coloca esse & antes de "campo"? Pra que serve isso? Porque se eu rodar o código sem isso funciona do mesmo jeito.

def livro_que_mais_vendeu_por(&campo)
   que_mais_vendeu_por("livro", &campo)
end
1 resposta

Olá Marcelle!

Peço desculpas pela demora em obter um retorno

Em Ruby, o & antes de um parâmetro de método é usado para converter um bloco em um objeto Proc.

No código que você compartilhou, o &campo indica que o parâmetro campo é um bloco que será convertido em um objeto Proc. Isso permite que o bloco seja passado como um argumento para outros métodos que esperam um bloco, como no caso do método que_mais_vendeu_por.

O método livro_que_mais_vendeu_por está definindo um parâmetro de bloco chamado campo, que será passado para o método que_mais_vendeu_por como um bloco. Ao usar o &campo, o bloco é convertido em um objeto Proc e pode ser tratado como um argumento normal do método.

No entanto, se você não utilizar o & antes do parâmetro campo, o bloco será tratado como um objeto normal, não como um bloco, e, portanto, não poderá ser passado para métodos que esperam um bloco como argumento. Se o método que_mais_vendeu_por não exigir um bloco como argumento, o código provavelmente funcionará sem o &, mas se esse método esperar um bloco, será necessário usar o & para converter o bloco em um objeto Proc antes de passá-lo como argumento.

Resumindo, o & antes do parâmetro campo permite que um bloco seja passado como argumento para o método que_mais_vendeu_por ao converter o bloco em um objeto Proc.

Claro! Aqui estão alguns links que podem ajudá-lo a entender melhor o uso do & antes de um parâmetro de método em Ruby para converter um bloco em um objeto Proc e documentação:

Espero que isso ajude!