Actions
Bug #13837
closedClass attributes get overshadowed by local variables
Bug #13837:
Class attributes get overshadowed by local variables
Description
irb(main):001:0> RUBY_VERSION
=> "2.4.1"
irb(main):002:0> class Foo
irb(main):003:1> attr_accessor :bar
irb(main):004:1> def initialize
irb(main):005:2> self.bar = 1
irb(main):006:2> end
irb(main):007:1> def baz
irb(main):008:2> if bar.nil?
irb(main):009:3> bar = 0
irb(main):010:3> end
irb(main):011:2> end
irb(main):012:1> def fuga
irb(main):013:2> bar = 0 if bar.nil?
irb(main):014:2> [bar, self.bar]
irb(main):015:2> end
irb(main):016:1> def hoge
irb(main):017:2> bar
irb(main):018:2> end
irb(main):019:1> end
=> :hoge
irb(main):020:0> foo = Foo.new
=> #<Foo:0x00564abe333740 @bar=1>
irb(main):021:0> foo.bar
=> 1
irb(main):022:0> foo.hoge
=> 1
irb(main):023:0> foo.fuga
=> [0, 1]
irb(main):024:0> foo.bar
=> 1
irb(main):025:0> foo.baz
=> nil
Even though the bar.nil? in fuga should not be true, it gets overwritten by the local variable preceding the if and thus evaluates true.
I'd expect a behavior like below. It's really weird to get my class attributes overridden by a local variable that shouldn't even be evaluated.
1 if 2.nil?
=> nil
Actions