このことを考慮:
class Foo
def secret
@some_ivar
end
end
foo_instance = Foo.new
foo_instance.in_foos_context do
@some_ivar = "bar"
end
foo_instance.secret
=> "bar"
怪しげに見えることは別として、これは可能ですか?もしそうなら、どのようにin_foos_context
メソッドを実装しますか?
このことを考慮:
class Foo
def secret
@some_ivar
end
end
foo_instance = Foo.new
foo_instance.in_foos_context do
@some_ivar = "bar"
end
foo_instance.secret
=> "bar"
怪しげに見えることは別として、これは可能ですか?もしそうなら、どのようにin_foos_context
メソッドを実装しますか?
あなたが使用することができますinstance_eval
class Foo
def secret
@some_ivar
end
def in_foos_context(&block)
instance_eval(&block)
end
end
foo_instance = Foo.new
foo_instance.in_foos_context do
@some_ivar = "bar"
end
foo_instance.secret # => "bar"
以下のようにできます:
class Foo
def secret
@some_ivar
end
def in_foos_context(arg,&block)
instance_exec(arg,&block)
end
end
foo_instance = Foo.new
foo_instance.in_foos_context("bar") do |v|
@some_ivar = v
end
foo_instance.secret
# => "bar"