Любой метод можно вызывать с блоком как неявный аргумент. Внутри метода вы можете вызвать блок, используя ключевое слово yield со значением. Затем метод может вызывать связанный блок один или несколько раз с использованием инструкции yield Ruby. Таким образом, любой метод, который хочет взять блок в качестве параметра можно использовать ключевое слово выход для выполнения блока в любое время:
=begin
Ruby Code blocks are chunks of code between braces or
between do..end that you can associate with method invocations
=end
def call_block
puts 'Start of method'
# you can call the block using the yield keyword
yield
yield
puts 'End of method'
end
# Code blocks may appear only in the source adjacent to a method call
call_block {puts 'In the block'}
Выход есть:
>ruby p022codeblock.rb
Start of method
In the block
In the block
End of method
>Exit code: 0
Если вы предоставляете блок кода когда вы вызываете метод, затем внутри метода вы можете yield
управлять этим блоком кода - приостановить выполнение метода; выполнить код в блоке; и вернуть управление в тело метода сразу после вызова. Если код кода не передан и вызывается yield
, Ruby вызывает исключение.
Вы попробовали прочитать документацию? –