一种reader方法,它返回实例变量的值,然后将其重置为nil

时间:2010-04-02 16:32:41

标签: ruby

是否有更短(更清洁)的方法来编写以下读者方法:

class Foo
  attr_writer :bar

  def bar
    return_value = @bar
    self.bar = nil
    return_value
  end
end

这是控制台上的一些输出,用于显示它的作用:

>> foo = Foo.new
=> #<Foo:0x1010e9cf8>
>> foo.bar
=> nil
>> foo.bar = "ok"
=> "ok"
>> foo.bar
=> "ok"
>> foo.bar
=> nil

4 个答案:

答案 0 :(得分:3)

  def bar
    @bar
  ensure
    @bar = nil
  end

如果您愿意,这可以是一行代码:

  def bar
    @bar ensure @bar = nil
  end

答案 1 :(得分:1)

 def bar
   @bar, rv = nil, @bar
   rv
 end

 def bar
   (@bar, rv = nil, @bar)[1]
 end

答案 2 :(得分:0)

不要这么认为。对我来说已经很短暂干净了!

答案 3 :(得分:0)

不那么聪明,但也许更清楚:

class Foo

  def initialize
    @bar = []
  end

  def bar
    @bar.pop
  end

  def bar= (obj)
    @bar[0] = obj
  end

end