是否有更短(更清洁)的方法来编写以下读者方法:
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
答案 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