Единственная причина здесь в том, чтобы иметь более сжатый код (вам не нужно добавлять имя экземпляра перед вызовом метода). Используя блоки в целом, вы можете написать очень аккуратный, лаконичный и читаемый код. Иногда вы можете сэкономить потребителям своего кода много текста и даже логику кода.
Вот традиционный случай!
file = File.open("some_file.txt","w")
file << "more code"
file.close
Сравните это с этим хорошим вариантом блока:
File.open("some_file.txt","w") { |file| file << "adding new stuff" }
Это избавило пользователя от необходимости открывать и закрывать (лично я все время забываю) файл сам. Вместо этого это заставило его сосредоточиться на том, что он хочет.
Старайтесь вкладывать блоки в такие ситуации +, когда вы хотите написать хорошие DSL.