【发布时间】:2015-08-29 16:51:08
【问题描述】:
我正在阅读 Pickaxe 书(第 281 页)的 Haml 部分,代码如下:
require 'haml'
engine = Haml::Engine.new(%{
%body
#welcome-box
%p= greeting
%p
As of
= Time.now
the reasons you gave were:
%table
%tr
%th Reason
%th Rank
- for reason in reasons
%tr
%td= reason[:reason_name]
%td= reason[:rank]
})
data = {
greeting: 'Hello, Dave Thomas',
reasons: [
{ reason_name: 'flexible', rank: '87' },
{ reason_name: 'transparent', rank: '76' },
{ reason_name: 'fun', rank: '94' },
]
}
puts engine.render(nil, data)
运行它会产生错误:
/Users/andrekibbe/.rvm/gems/ruby-2.2.1/gems/haml-4.0.7/lib/haml/engine.rb:136:in `block in render': can't modify frozen NilClass (RuntimeError)
from /Users/andrekibbe/.rvm/gems/ruby-2.2.1/gems/haml-4.0.7/lib/haml/engine.rb:135:in `instance_eval'
from /Users/andrekibbe/.rvm/gems/ruby-2.2.1/gems/haml-4.0.7/lib/haml/engine.rb:135:in `ensure in render'
from /Users/andrekibbe/.rvm/gems/ruby-2.2.1/gems/haml-4.0.7/lib/haml/engine.rb:135:in `render'
from haml_example.rb:17:in `<main>'
我对 Haml::Engine#render 语法感到困惑,根据documentation,该语法将块作为三个参数中的最后一个——而在上面的代码中,块是两个参数中的第一个。为什么block应该设置为“nil”?
【问题讨论】: