Project

General

Profile

Actions

Bug #13837

closed

Class attributes get overshadowed by local variables

Added by valerauko (Balint Erdos) over 6 years ago. Updated almost 5 years ago.

Status:
Closed
Assignee:
-
Target version:
-
[ruby-core:82453]

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

Also available in: Atom PDF

Like0
Like0Like0Like0Like0