English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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.
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.
Veamos un ejemplo de una sentencia yield:
#!/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:
#!/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.
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:
#!/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.
#!/usr/bin/ruby defena.bloque(&bloque) llamada.a.bloque final test { imprime "¡Hola Mundo!"}
El resultado de ejecutar el ejemplo anterior es:
¡Hola Mundo!
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).
#!/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