Что такое блок? Что такое yield? Можно ли передавать блоки в методы? Каким образом?
Вопрос проверяет понимание блоков, механизма их передачи и использования в методах.
Короткий ответ
Блок в Ruby — это анонимный кусок кода, который передается методу. Он может быть вызван с помощью yield. Блоки можно передавать в методы через символ & в параметрах.
Длинный ответ
Блок — это кусок кода, переданный методу. Блоки записываются между {} или do...end. Их часто используют для передачи логики в методы.
Пример с yield:
def example
yield if block_given?
end
example { puts "Hello from block!" } # => Hello from block!
Блоки могут принимать аргументы:
def example
yield(42)
end
example { |num| puts num } # => 42
Для передачи блока в метод используют параметр с &:
def example(&block)
block.call
end
example { puts "Hello, block with &!" } # => Hello, block with &!
Разница между блоками и другими объектами, такими как Proc, в том, что блок не является объектом, пока его явно не преобразуют.