編集:環境情報を含めるのを忘れていました... Win7x64、RubyInstaller Ruby v1.9.1-p378
編集 2: v1.9.1、パッチ 429 に更新されたばかりで、同じエラーが発生します。
編集 3: Ruby v1.8.7、パッチ 249 でこの同じコードを実行すると、正常に動作します。どうやらそれを壊したのはv1.9.1です。
私はERBを初めて使用し、見つけたサンプルは...うーん...役に立たない...ERBを約1時間いじって、いくつかの基本的な例が機能するようになりました(最終的に)が、なぜこれが機能しないのかわかりません...
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' から from 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
バインディングを見ているのですか?渡すことで、OpenStruct からのバインディングを使用するように指示しました。vars_binding
誰かがそれがうまくいかない理由を教えてくれますか?