Как я отмечал в своем комментарии, ваш код работает почти идеально, из коробки.
В источнике приведены некоторые примеры использования, такие как здесь , но фактическая разница виспользование не совсем понятно, пока вы не покопаетесь в деталях и не попробуете несколько примеров.
Вы можете увидеть разницу в том, как это работает как замыкание, в примере ниже.Единственные изменения, которые я сделал:
- Использовал переменную экземпляра,
@content
в качестве примера того, что вы можете использовать в реальном приложении - Добавил экземпляр var в неявную версию
- Удалены комментарии
Пример:
require 'prawn'
@content = "Hello World"
Prawn::Document.generate "example1.pdf" do
# self here is set to the newly instantiated Prawn::Document
# and so any variables in the outside scope are unavailable
font "Times-Roman"
draw_text @content, :at => [200,720], :size => 32
end
Prawn::Document.generate "example2.pdf" do |pdf|
# self here is left alone
pdf.font "Times-Roman"
pdf.draw_text @content, :at => [200,720], :size => 32
end
Обратите внимание, что файл example1.pdf не содержит текста, поскольку внешняя область недоступна,Example2.pdf содержит текст.
Обратите внимание, что это прекрасно работает с настройками локальной переменной, отмеченными в примерах (например, вы можете установить content = 'hello'
вне блоков, и все работает отлично)