Ruby で非常に奇妙な (少なくとも私にとっては) 状況に対処しようとしています。私のコードは次のとおりです。
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
出力は次のとおりです。
SELF: 1
INST: 1
SELF: 1
INST: 0
SELF: 0
INST: 0
SELF: 0
INST: 0
SELF: 0
INST:
奇妙なのは、flag
変数がnil
最後に出力されたとき ( の内部else
) であるが、0
その直前 ( if...else
flagtest メソッドの前) であるということです。
数行のコードを削除すると、次のコードのようにすべてが正常に戻ったように見えます。
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
次の出力が得られます。
SELF: 1
INST: 1
SELF: 0
INST: 0
SELF: 0
INST: 0
SELF: 0
INST: 0
何が、なぜ起こっているのかについての手がかりはありますか?