class Usuario
  attr_accessor :nombre

  def saludar
    yield(@nombre)
  end

end

uriel = Usuario.new

uriel.nombre = "Uriel"

uriel.saludar { |nombre| puts "Hola #{nombre}" }
uriel.saludar { |nombre| puts "Hello #{nombre}" }

Output

Hola Uriel
Hello Uriel

També un bloc pot retornar un valor.

class Usuario
  attr_accessor :nombre

  def saludar_with
    saludo = yield(@nombre)
    puts saludo
  end

end

uriel = Usuario.new

uriel.nombre = "Uriel"

uriel.saludar_with { |nombre|"Hola #{nombre}" }
uriel.saludar_with { |nombre|"Hello #{nombre}" }

Output

Hola Uriel
Hello Uriel

El valor que un bloque retorna és l’última expressió dins del bloc mateixa.

Podriem canviar a múltiples expressions:

class Usuario
  attr_accessor :nombre

  def saludar
    saludo = yield(@nombre)
    puts saludo
  end

end

uriel = Usuario.new

uriel.nombre = "Uriel"

uriel.saludar do |nombre|
  saludo = "Hola #{nombre}"
  saludo
end

uriel.saludar { |nombre|"Hello #{nombre}" }

Output

Hola Uriel
Hello Uriel