ERBで‥を読んで、Structだとどうだろって試していてはまった。
require 'erb' Foo = Struct.new(:foo, :bar) class Foo def env binding end end foo = Foo.new('foo', 'bar') p ERB.new('<%= foo %> and <%= bar %>').result(foo.env)
よしよし。
"foo and bar"
envメソッドなくしてみよう。
require 'erb' Foo = Struct.new(:foo, :bar) foo = Foo.new('foo', 'bar') p ERB.new('<%= foo %> and <%= bar %>').result(foo.instance_eval{binding})
とほほ、fooが‥。
"#<struct Foo foo=\"foo\", bar=\"bar\"> and bar"
instance_evalはそのインスタンスの環境と、ローカル変数からなるbindingになってしまうのでしたとさ。
それはそれとして、ほんとに最初に書いたやつはこっち。
require 'erb' Foo = Struct.new(:foo, :bar) ERB.new('<%= foo %> and <%= bar %>').def_method(Foo, 'foo_view') foo = Foo.new('foo', 'bar') p foo.foo_view