Ruby bloque

Usted ya sabe cómo Ruby define los métodos y cómo los llama. De manera similar, Ruby tiene el concepto de bloque.

  • Un bloque se compone de una gran cantidad de código.
  • Usted debe darle un nombre al bloque.
  • El código de un bloque siempre está encerrado entre llaves {}.
  • El bloque siempre se invoca desde una función que tiene el mismo nombre. Esto significa que si su bloque se llamatest, entonces debe utilizar la funcióntestpara llamar a este bloque.
  • Puede utilizaryieldla sentencia para llamar al bloque.

Sintaxis

block_name{ statement1 statement2 .......... }

Aquí, aprenderá a usar una simpleyieldsentencia para llamar al bloque. También aprenderá a usar unayieldsentencia con parámetros para llamar al bloque. En los ejemplos, verá estos dos tipos deyieldsentencias.

yieldSentencia

Veamos un ejemplo de la sentencia yield:

Ejemplo

#!/usr/bin/ruby # -*- coding: UTF-8 -*- def test puts "Dentro del método test" yield puts "Has vuelto al método test" yield end test {puts "Estás dentro del bloque"}

Pruébalo »

El resultado del ejemplo anterior es:

在 test 方法内
你在块内
你又回到了 test 方法内
你在块内

También puede pasar una sentencia yield con parámetros. A continuación se muestra un ejemplo:

Ejemplo

#!/usr/bin/ruby # -*- coding: UTF-8 -*- def test yield 5 puts "Dentro del método test" yield 100 end test {|i| puts "Estás dentro del bloque #{i}"}

Pruébalo »

El resultado del ejemplo anterior es:

你在块 5 内
在 test 方法内
你在块 100 内

Aquí,yieldla sentencia yield va seguida de parámetros. Incluso puede pasar múltiples parámetros. En el bloque, puede colocar una variable entre dos barras verticales para aceptar parámetros. Por lo tanto, en el código anterior, la sentencia yield 5 pasa el valor 5 como parámetro al bloque test.

Ahora, observe la siguiente sentencia:

test {|i| puts "Estás dentro del bloque #{i}"}

Aquí, el valor 5 se recibe en la variable i. Ahora, observe la siguiente sentencia puts:

puts "Estás dentro del bloque #{i}"

La salida de esta sentencia puts es:

Estás dentro del bloque5dentro

Si desea pasar múltiples parámetros, entoncesyieldla sentencia se verá así:

yield a, b

En este caso, el bloque se verá así:

test {|a, b| statement}

Los parámetros se separan con comas.

Bloques y métodos

Usted ha visto cómo se relacionan los bloques y los métodos. Normalmente, usa la sentencia yield para invocar el bloque desde un método con el mismo nombre. Por lo tanto, el código se ve así:

Ejemplo

#!/usr/bin/ruby def test yield end test{ puts "Hello world"}

Este ejemplo es la forma más sencilla de implementar un bloque. Usted usayieldla sentencia yield para llamar al bloque test.

Pero si el último parámetro de un método va precedido de &, entonces puede pasar un bloque a ese método, y este bloque se puede asignar al último parámetro. Si * y & aparecen a la vez en la lista de parámetros, & debe colocarse después.

Ejemplo

#!/usr/bin/ruby def test(&block) block.call end test { puts "Hello World!"}

Pruébalo »

El resultado del ejemplo anterior es:

Hello World!

Bloques BEGIN y END

Cada archivo fuente de Ruby puede declarar un bloque de código que se ejecuta cuando se carga el archivo (bloque BEGIN), y un bloque de código que se ejecuta después de que el programa complete su ejecución (bloque END).

Ejemplo

#!/usr/bin/ruby BEGIN { #Bloque de código BEGIN puts "Bloque de código BEGIN" } END { #Bloque de código END puts "Bloque de código END" } #Bloque de código MAIN puts "Bloque de código MAIN"

Un programa puede contener múltiples bloques BEGIN y END. Los bloques BEGIN se ejecutan en el orden en que aparecen. Los bloques END se ejecutan en el orden inverso al que aparecen. Cuando se ejecuta, el programa anterior muestra el siguiente resultado:

BEGIN 代码块
MAIN 代码块
END 代码块
Otras extensiones