代码之家  ›  专栏  ›  技术社区  ›  Hakan Ensari

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

  •  2
  • Hakan Ensari  · 技术社区  · 16 年前

    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 回复  |  直到 16 年前
        1
  •  3
  •   Wayne Conrad    16 年前
      def bar
        @bar
      ensure
        @bar = nil
      end
    

    如果需要,这可以是一行:

      def bar
        @bar ensure @bar = nil
      end
    
        2
  •  1
  •   rampion    16 年前
     def bar
       @bar, rv = nil, @bar
       rv
     end
    

    或

     def bar
       (@bar, rv = nil, @bar)[1]
     end
    
        3
  •  0
  •   Nick Moore Wain    16 年前

        4
  •  0
  •   steenslag    16 年前

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

    class Foo
    
      def initialize
        @bar = []
      end
    
      def bar
        @bar.pop
      end
    
      def bar= (obj)
        @bar[0] = obj
      end
    
    end
    
    推荐文章