I am trying to deal with a very strange (at least to me) situation in Ruby. My code is as follows:
class ScopeTest attr_accessor :flag def flagtest puts "SELF: " + self.flag.to_s puts "INST: " + flag.to_s if flag == 1 flag = 0 puts "SELF: " + self.flag.to_s puts "INST: " + flag.to_s self.flag = 0 puts "SELF: " + self.flag.to_s puts "INST: " + flag.to_s flagtest else puts "SELF: " + self.flag.to_s puts "INST: " + flag.to_s end end end st = ScopeTest.new st.flag = 1 st.flagtest
And the conclusion is as follows:
SELF: 1 INST: 1 SELF: 1 INST: 0 SELF: 0 INST: 0 SELF: 0 INST: 0 SELF: 0 INST:
What is strange that the flag
variable is nil
the last time I print it (inside else
), but 0
right before that (before if...else
in the flagestest method)?
When I delete a few lines of code, everything seems normal, like the following code:
class ScopeTest attr_accessor :flag def flagtest puts "SELF: " + self.flag.to_s puts "INST: " + flag.to_s if flag == 1 self.flag = 0 puts "SELF: " + self.flag.to_s puts "INST: " + flag.to_s flagtest else puts "SELF: " + self.flag.to_s puts "INST: " + flag.to_s end end end st = ScopeTest.new st.flag = 1 st.flagtest
gives the following result:
SELF: 1 INST: 1 SELF: 0 INST: 0 SELF: 0 INST: 0 SELF: 0 INST: 0
Any clues as to what is happening and why?
source share