【发布时间】:2011-03-15 14:56:45
【问题描述】:
编辑:忘记包含我的环境信息... Win7x64, RubyInstaller Ruby v1.9.1-p378
编辑 2: 刚刚更新到 v1.9.1,补丁 429,仍然出现同样的错误。
编辑 3: 在 Ruby v1.8.7 补丁 249 中运行相同的代码,工作正常。所以显然是 v1.9.1 破坏了它。
我是使用 ERB 的新手,我能找到的示例是……嗯……帮助不大……在使用 ERB 大约一个小时后,我得到了一些基本示例(终于),但我不知道为什么这不起作用......
require 'ostruct'
require 'erb'
data = {:bar => "bar"}
vars = OpenStruct.new(data)
template = "foo "
erb = ERB.new(template)
vars_binding = vars.send(:binding)
puts erb.result(vars_binding)
此代码产生以下错误:
irb(main):007:0> puts erb.result(vars_binding)
NameError: main:Object 的未定义局部变量或方法“bar”
来自 (erb):1
来自 C:/Ruby/v1.9.1/lib/ruby/1.9.1/erb.rb:753:in `eval'
来自 C:/Ruby/v1.9.1/lib/ruby/1.9.1/erb.rb:753:in `result'
来自 (irb):7
来自 C:/Ruby/v1.9.1/bin/irb:12:in `'
为什么要查看main:Object 绑定?我通过传入vars_binding 告诉它使用来自OpenStruct 的绑定
有人可以告诉我为什么它不起作用,并帮助我让它起作用吗?
【问题讨论】:
-
在 Mac 上的 ruby 1.8.7 和 1.9.1 上为我工作:输出“foo”并返回 nil。
-
@Andrew:好奇你能不能解决这个问题?
-
@Andrew:当我通过 IRB 控制台运行您的确切示例时,我也会收到错误消息。如果这很重要,我使用的是 Windows Vista。
标签: ruby binding erb nameerror