Ruby - Bloques
Has visto cómo Ruby define métodos donde puedes poner un número de declaraciones y luego llamas a ese método. Del mismo modo, Ruby tiene un concepto de Block.
Un bloque consta de fragmentos de código.
Asignas un nombre a un bloque.
El código del bloque siempre se incluye entre llaves ({}).
Un bloque siempre se invoca desde una función con el mismo nombre que el del bloque. Esto significa que si tiene un bloque con el nombre prueba , entonces usa la función prueba para invocar este bloque.
Invoca un bloqueo utilizando la declaración de rendimiento .
Sintaxis
block_name {
statement1
statement2
..........
}
Aquí, aprenderá a invocar un bloque usando una declaración de rendimiento simple . También aprenderá a usar una declaración de rendimiento con parámetros para invocar un bloque. Verificará el código de muestra con ambos tipos de declaraciones de rendimiento .
La declaración de rendimiento
Veamos un ejemplo de la declaración de rendimiento:
#!/usr/bin/ruby
def test
puts "You are in the method"
yield
puts "You are again back to the method"
yield
end
test {puts "You are in the block"}
Esto producirá el siguiente resultado:
You are in the method
You are in the block
You are again back to the method
You are in the block
También puede pasar parámetros con la declaración de rendimiento. Aquí hay un ejemplo:
#!/usr/bin/ruby
def test
yield 5
puts "You are in the method test"
yield 100
end
test {|i| puts "You are in the block #{i}"}
Esto producirá el siguiente resultado:
You are in the block 5
You are in the method test
You are in the block 100
Aquí, la declaración de rendimiento se escribe seguida de parámetros. Incluso puede pasar más de un parámetro. En el bloque, coloca una variable entre dos líneas verticales (||) para aceptar los parámetros. Por lo tanto, en el código anterior, la instrucción yield 5 pasa el valor 5 como parámetro al bloque de prueba.
Ahora, mire la siguiente declaración:
test {|i| puts "You are in the block #{i}"}
Aquí, el valor 5 se recibe en la variable i . Ahora, observe la siguiente declaración de put :
puts "You are in the block #{i}"
El resultado de esta declaración de put es:
You are in the block 5
Si desea pasar más de un parámetro, la declaración de rendimiento se convierte en:
yield a, b
y el bloque es -
test {|a, b| statement}
Los parámetros estarán separados por comas.
Bloques y métodos
Has visto cómo un bloque y un método pueden asociarse entre sí. Normalmente, se invoca un bloque mediante la declaración de rendimiento de un método que tiene el mismo nombre que el del bloque. Por lo tanto, escribe:
#!/usr/bin/ruby
def test
yield
end
test{ puts "Hello world"}
Este ejemplo es la forma más sencilla de implementar un bloque. Llame al bloque de prueba utilizando la declaración de rendimiento .
Pero si el último argumento de un método está precedido por &, entonces puede pasar un bloque a este método y este bloque se asignará al último parámetro. En caso de que tanto * como & estén presentes en la lista de argumentos, & debería aparecer más tarde.
#!/usr/bin/ruby
def test(&block)
block.call
end
test { puts "Hello World!"}
Esto producirá el siguiente resultado:
Hello World!
Bloques BEGIN y END
Cada archivo fuente de Ruby puede declarar bloques de código que se ejecutarán mientras se carga el archivo (los bloques BEGIN) y después de que el programa ha terminado de ejecutarse (los bloques END).
#!/usr/bin/ruby
BEGIN {
# BEGIN block code
puts "BEGIN code block"
}
END {
# END block code
puts "END code block"
}
# MAIN block code
puts "MAIN code block"
Un programa puede incluir varios bloques BEGIN y END. Los bloques BEGIN se ejecutan en el orden en que se encuentran. Los bloques END se ejecutan en orden inverso. Cuando se ejecuta, el programa anterior produce el siguiente resultado:
BEGIN code block
MAIN code block
END code block