Yield
É usado para fazer uma passagem de bloco para um método (isso mesmo que você leu), usando "yield" dentro do método. Então lembrando quando usado o Yield, a chamada do método deve ser acompanhada de um bloco com as instruções.
- Um exemplo básico:
def metodo yield end metodo {puts "diga olá"} => diga olá
- Várias chamadas:
def metodo puts "você por aqui?" yield puts "de novo aqui?" yield end metodo {puts "sim"} => você por aqui? => sim => de novo aqui? => sim
- Bloco com passagem de parâmetro:
def metodo(val) yield(val) end metodo(4) {|val| puts "#{val}"} => 4
- Yield com condicional (Note que a segunda chamada não é efetuado pelo fato de não existir um bloco de código na chamada do método, pelo fato de usar um valor condicional "if block_given?"):
def metodo(valor) yield(valor) if block_given? end metodo(10) {|val| puts val*val} metodo(20) => 100 =>
Bloco de código associado à uma variável. O método Lambda está presente no módulo Kernel do Ruby, portanto não precisa instanciar quando chama-lo.
- Chamada com um argumento (Para fazer a chamada use a função "call"):
lambda = -> (v1) { 10 * v1} p lambda.call(10) =>100
- Chamada com um ou dois argumentos:
lambda = ->(a,b=6){ a * b } p lambda.call(2) p lambda.call('$') p lambda.call(10,10) =>12 =>$$$$$$ =>100
Também é um bloco de código associado à uma variável, similar ao Lambda, onde sua chamada é feita com instância.
- Exemplo prático:
variavel = Proc.new {|valor| valor*3} p variavel.call(2) =>6
Darlan Dieterich
Nenhum comentário:
Postar um comentário
Deixe aqui seu comentário