1

このことを考慮:

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メソッドを実装しますか?

4

3 に答える 3

5

あなたが使用することができます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"
于 2013-10-31T17:26:51.200 に答える
0

以下のようにできます:

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"
于 2013-10-31T17:38:05.843 に答える