English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

块 Ruby

Ya sabes cómo Ruby define métodos y cómo tú llamas a métodos. De manera similar, Ruby tiene el concepto de bloque.

  • 块由大量的代码组成。
  • 您需要给块取个名称。
  • El bloque consta de mucho código.
  • Necesita nombrar su bloque. El bloque siempre se llama desde la función que tiene el mismo nombre. Esto significa que si el nombre de su bloque esEl código del bloque siempre se encuentra entre llaves {}. El bloque siempre se llama desde la función que tiene el mismo nombre. Esto significa que si el nombre de su bloque es entonces debe usar la función
  • para llamar a este bloque. test rendir sentencias para llamar al bloque. Puede usar

gramática

block_name{
   sentencia1
   sentencia2
   ..........
}

Aquí, aprenderá a usar un simple rendir sentencias para llamar al bloque. También aprenderá cómo usar la rendir sentencias para llamar al bloque. En el ejemplo, verá estos dos tipos de rendir sentencia.

rendir sentencia

Veamos un ejemplo de una sentencia yield:

Ejemplo en línea

#!/usr/bin/ruby
# -*- coding: UTF-8 -*-
defena.bloque
   imprime "Dentro del método test"
   rendir
   imprime "Volverás al método test"
   rendir
final
test {imprime "Estás en el bloque"}

El resultado de ejecutar el ejemplo anterior es:

dentro del método test
estás en el bloque
volverás al método test
estás en el bloque

También puede pasar una sentencia yield con parámetros. Aquí hay un ejemplo:

Ejemplo en línea

#!/usr/bin/ruby
# -*- coding: UTF-8 -*-
defena.bloque
   rendir 5
   imprime "Dentro del método test"
   rendir 100
final
test {|i| imprime "Estás en el bloque #{i}"}

El resultado de ejecutar el ejemplo anterior es:

estás en el bloque 5 interno
dentro del método test
estás en el bloque 10interno

Aquí,rendir La sentencia está seguida de parámetros. Incluso puede pasar varios parámetros. En el bloque, puede colocar una variable entre dos barras verticales para recibir parámetros. Por lo tanto, en el código anterior, yield 5 La sentencia pasa valores al bloque de test. 5 como parámetros.

Ahora, veamos la siguiente sentencia:

test {|i| imprime "Estás en el bloque #{i}"}

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

imprime "Estás en el bloque #{i}"

La salida de esta sentencia puts es:

estás en el bloque5 interno

Si desea pasar varios parámetros, entonces rendir La sentencia se ve así:

rendir a, b

En este momento, el bloque se ve así:

test {|a, b| sentencia}

los parámetros se separan por comas.

bloque y método

Ya ha visto cómo se relacionan el bloque y el método. Generalmente, utiliza la sentencia yield para llamar al bloque desde la llamada al método con el mismo nombre. Por lo tanto, el código es el siguiente:

Ejemplo en línea

#!/usr/bin/ruby
defena.bloque
  rendir
final
test{ imprime "¡Hola mundo"}

Esta es la manera más simple de implementar un bloque. Usted usa rendir la sentencia llama al bloque de test.

Pero si el último parámetro del método tiene & antes, puede pasarle un bloque a este método y este bloque puede asignarse al último parámetro. Si * Aparecen & al mismo tiempo en la lista de parámetros, & debe estar al final.

Ejemplo en línea

#!/usr/bin/ruby
defena.bloque(&bloque)
   llamada.a.bloque
final
test { imprime "¡Hola Mundo!"}

El resultado de ejecutar el ejemplo anterior es:

¡Hola Mundo!

Bloques BEGIN y END

Cada archivo de origen Ruby puede declarar un bloque de código que se ejecuta cuando el archivo se carga (bloque BEGIN) y un bloque de código que se ejecuta después de que el programa se ejecuta (bloque END).

Ejemplo en línea

#!/usr/bin/ruby
BEGIN { 
  # Bloque código BEGIN
  puts "Bloque código BEGIN"
} 
END { 
  # Bloque código END
  puts "Bloque código END"
}
  # Bloque código MAIN
puts "Bloque 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 ejecutarse, el programa anterior produce el siguiente resultado:

Bloque código BEGIN
Bloque código MAIN
Bloque código END