Ruby блок

Вы уже знаете, как Ruby определяет методы и как вы вызываете методы. Аналогично, в Ruby есть понятие блоков.

  • Блок состоит из фрагментов кода.
  • Вам нужно дать блоку имя.
  • Код в блоке всегда заключён в фигурные скобки {}.
  • Блоки всегда вызываются из функций с тем же именем. Это означает, что если имя вашего блока —test, то вы должны использовать функциюtest, чтобы вызвать этот блок.
  • Вы можете использовать операторyield, чтобы вызвать блок.

Синтаксис

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

Здесь вы узнаете, как использовать простой операторyieldдля вызова блока. Вы также узнаете, как использовать операторyieldс параметрами для вызова блока. В примерах вы увидите эти два типаyieldинструкциях.

yieldStatements

Давайте рассмотрим пример оператора yield:

Пример

#!/usr/bin/ruby # -*- coding: UTF-8 -*- def test puts "Внутри метода test" yield puts "Вы снова внутри метода test" yield end test {puts "Вы внутри блока"}

Попробуйте »

Вывод приведенного выше примера:

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

Вы также можете передать инструкцию yield с параметрами. Вот пример:

Пример

#!/usr/bin/ruby # -*- coding: UTF-8 -*- def test yield 5 puts "Внутри метода test" yield 100 end test {|i| puts "Вы внутри блока #{i}"}

Попробуйте »

Вывод приведенного выше примера:

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

Здесь,yieldинструкция сопровождается параметрами. Вы даже можете передать несколько параметров. В блоке можно разместить переменную между двумя вертикальными чертами, чтобы принимать параметры. Следовательно, в приведённом выше коде инструкция yield 5 передаёт значение 5 в блок test как параметр.

Теперь посмотрите на следующую инструкцию:

test {|i| puts "Вы внутри блока #{i}"}

Здесь значение 5 принимается в переменной i. Теперь обратите внимание на следующую инструкцию puts:

puts "Вы внутри блока #{i}"

Вывод этой инструкции puts:

Вы находитесь в блоке5внутри

Если вы хотите передать несколько параметров, тоyieldинструкция выглядит следующим образом:

yield a, b

На этом этапе блок выглядит следующим образом:

test {|a, b| инструкция}

Параметры разделяются запятыми.

Блоки и методы

Вы видели, как блоки и методы связаны друг с другом. Обычно вы используете оператор yield, чтобы вызвать блок из метода с тем же именем. Поэтому код выглядит следующим образом:

Пример

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

Этот пример — самый простой способ реализовать блок. Вы используетеyieldинструкцию, чтобы вызвать блок test.

Однако если перед последним параметром метода стоит &, то вы можете передать блок этому методу, и этот блок может быть присвоен последнему параметру. Если * и & встречаются вместе в списке параметров, & должен быть размещён после.

Пример

#!/usr/bin/ruby def test(&block) block.call end test { puts "Привет, мир!"}

Попробуйте »

Вывод приведенного выше примера:

Hello World!

Блоки BEGIN и END

Каждый исходный файл Ruby может объявить блок кода, который будет выполнен при загрузке файла (блок BEGIN), и блок кода, который будет выполнен после завершения выполнения программы (блок END).

Пример

#!/usr/bin/ruby BEGIN { #блок кода BEGIN puts "блок кода BEGIN" } END { #блок кода END puts "блок кода END" } #блок кода MAIN puts "блок кода MAIN"

Программа может содержать несколько блоков BEGIN и END. Блоки BEGIN выполняются в порядке их появления. Блоки END выполняются в обратном порядке их появления. При выполнении вышеуказанная программа выводит следующий результат:

BEGIN 代码块
MAIN 代码块
END 代码块
Другие расширения