在大虾http://prawnpdf.org/manual.pdf的Prawn pdf示例中,手册广泛使用“隐式块”进行引用。对于这个问题,我一直无法使它与Prawn或任何Ruby代码一起使用。我收到此错误NoMethodError:main:Object
的未定义方法'foo'# Assignment
pdf = Prawn::Document.new
pdf.text "Hello World"
pdf.render_file "assignment.pdf"
# Implicit Block
Prawn::Document.generate("implicit.pdf") do
text "Hello World"
end
# Explicit Block
Prawn::Document.generate("explicit.pdf") do |pdf|
pdf.text "Hello World"
end
有人能解释我做错了什么还是做得更好,隐式块到底是什么意思?似乎可以节省时间,但是我在任何地方都找不到有关这种“隐式块”的文档。
答案 0 :(得分:0)
正如我在评论中指出的那样,您的代码开箱即用,效果几乎完美。
该来源提供了一些有关用法的示例,例如here,但是在您深入研究细节并尝试一些示例之前,用法的实际差异并不清楚。
在下面的示例中,您可以看到这作为闭包的工作方式有所不同。我所做的唯一更改:
@content
作为实际应用程序中可能使用的示例示例:
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'
,并且效果很好)