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

Ruby Основной учебник

Ruby Уровень продвинутый учебник

Блоки Ruby

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

  • Блок состоит из большого количества кода.
  • Вам нужно дать блоку имя.
  • Код в блоке всегда находится внутри фигурных скобок {}.
  • Блок всегда вызывается функцией с тем же именем. Это означает, что если ваше имя блока если вам нужно использовать функцию,那么您要使用函数 если вам нужно использовать функцию test
  • чтобы вызвать этот блок. yield выражение для вызова блока. Вы можете использовать

синтаксис

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

здесь вы узнаете, как использовать простой yield выражение для вызова блока. Вы также узнаете, как использовать выражения с аргументами yield выражение для вызова блока. В примере вы увидите这两种 типа yield выражение.

yield выражение

Давайте посмотрим на пример выражения 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| statement}

аргументы разделяются запятыми.

блок и метод

Вы уже видели, как блок и метод связаны между собой. Обычно вы используете оператор 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 { 
  # Начало блока кода
  puts "Начало блока кода"
} 
END { 
  # Конец блока кода
  puts "Конец блока кода"
}
  # Основной блок кода
puts "Основной блок кода"

Программа может содержать несколько блоков BEGIN и END. Блоки BEGIN выполняются в порядке их появления. Блоки END выполняются в порядке, обратном их的出现. При выполнении上面的 программы выводится следующее:

Начало блока кода
Основной блок кода
Конец блока кода