Править: забыл включать мою информацию о среде Win7x64, RubyInstaller Ruby v1.9.1-p378
РЕДАКТИРОВАНИЕ 2: просто обновленный к v1.9.1, исправьте 429, и все еще получение этой той же ошибки.
Редактирование 3: выполнение этого того же кода в Ruby v1.8.7, патч 249, хорошо работает. таким образом, это - v1.9.1, который повредил его, по-видимому.
Я плохо знаком с использованием ERB и образцов, которые я мог найти... ummm... менее, чем полезен... игравший вокруг с 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: undefined local variable or method `bar' for main:Object from (erb):1 from C:/Ruby/v1.9.1/lib/ruby/1.9.1/erb.rb:753:in `eval' from C:/Ruby/v1.9.1/lib/ruby/1.9.1/erb.rb:753:in `result' from (irb):7 from C:/Ruby/v1.9.1/bin/irb:12:in `'
почему это смотрит на main:Object
привязка? Я сказал этому использовать привязку от OpenStruct путем передачи в vars_binding
кто-то может заполнить меня на том, почему это не работает и помогает мне заставить это работать?
Как выглядит ваше окружение? Этот код сработал у меня (я просто изменил строку "bar" на "baz", чтобы разграничить в своем мозгу, и добавил его в шаблон):
require 'ostruct'
require 'erb'
data = {:bar => "baz"}
vars = OpenStruct.new(data)
template = "foo <%= bar %>"
erb = ERB.new(template)
vars_binding = vars.send(:binding)
puts erb.result(vars_binding)
Когда я запускаю его, я получаю:
defeateds-MacBook-Pro:Desktop defeated$ ruby erb.rb
foo baz
Под 1.8.7 на OSX:
defeateds-MacBook-Pro:Desktop defeated$ ruby -v
ruby 1.8.7 (2009-06-08 patchlevel 173) [universal-darwin10.0]