RubyGold試験の勉強の時に作成した自習問題
・過去に作成したものなのでコードの説明はありません(出来ない…)。
・実行結果をコメントとして記述しています(コード #=> 結果)。
・右往左往しているのでコードにもコメント化している箇所があります。

→ 「他の問題


#! ruby -Ks

#------------------------------------------------------------
# GoldOther009.rb
# ■定数
#------------------------------------------------------------

#------------------------------
CONST = "top"

#----------
module Mdl1
  CONST = "mdl1"
  CONST2 = "mdl2"

  def foo2
    CONST
  end

  def foo3
    CONST2
  end

end

#----------
class Cls1
  CONST = "cls1"
  def foo1
    CONST
  end

  class Cls11
    CONST = "cls11"
    def foo11
      CONST
    end
    def foo111
      Cls1::CONST
    end
  end

  class Cls12
    def foo12
      CONST
    end
  end


end

#----------
class Cls2 < Cls1
  CONST = "cls2"
end

#----------
class Cls3
  include Mdl1
end

#----------
class Cls4 < Cls1
  include Mdl1
end

#----------
class Cls5 < Cls1
  include Mdl1
  CONST = "cls5"
end

#----------
class Cls6 < Cls1
  include Mdl1
  CONST = "cls61"
  CONST2 = "cls62"
end

#------------------------------
puts "---"
puts "CONST                   -> " + CONST
puts "::CONST                 -> " + ::CONST
puts "---"
puts "Cls1::CONST             -> " + Cls1::CONST
puts "Cls1::Cls11::CONST      -> " + Cls1::Cls11::CONST
puts "Cls1.new.foo1           -> " + Cls1.new.foo1
puts "Cls1::Cls11.new.foo11   -> " + Cls1::Cls11.new.foo11
puts "Cls1::Cls11.new.foo111  -> " + Cls1::Cls11.new.foo111
puts "Cls1::Cls12.new.foo12   -> " + Cls1::Cls12.new.foo12
puts "---"
puts "Cls2::CONST             -> " + Cls2::CONST
puts "Cls2::Cls11::CONST      -> " + Cls2::Cls11::CONST
puts "Cls2.new.foo1           -> " + Cls2.new.foo1
puts "Cls2::Cls11.new.foo11   -> " + Cls2::Cls11.new.foo11
puts "Cls2::Cls11.new.foo111  -> " + Cls2::Cls11.new.foo111
puts "---"
puts "Cls3::CONST             -> " + Cls3::CONST
puts "Cls3.new.foo2           -> " + Cls3.new.foo2
puts "---"
puts "Cls4::CONST             -> " + Cls4::CONST             # mld1が表示される
puts "Cls4.new.foo1           -> " + Cls4.new.foo1           # cls1が表示される  ●mdl1ではない
puts "Cls4.new.foo2           -> " + Cls4.new.foo2           # mld1が表示される
puts "Cls4::Cls11::CONST      -> " + Cls4::Cls11::CONST      # cls11が表示される
puts "Cls4::Cls11.new.foo11   -> " + Cls4::Cls11.new.foo11   # cls11が表示される
puts "Cls4::Cls11.new.foo111  -> " + Cls4::Cls11.new.foo111  # cls1が表示される  ●mdl1ではない。わからんでもない
puts "Cls4::Cls12.new.foo12   -> " + Cls4::Cls12.new.foo12   # cls1が表示される  ●mdl1ではない
puts "---"
puts "Cls5::CONST             -> " + Cls5::CONST             # cls5が表示される
puts "Cls5.new.foo1           -> " + Cls5.new.foo1           # cls1が表示される  ●cls5でもmdl1でもない
puts "Cls5.new.foo2           -> " + Cls5.new.foo2           # mld1が表示される
puts "Cls5::Cls11::CONST      -> " + Cls5::Cls11::CONST      # cls11が表示される
puts "Cls5::Cls11.new.foo11   -> " + Cls5::Cls11.new.foo11   # cls11が表示される
puts "Cls5::Cls11.new.foo111  -> " + Cls5::Cls11.new.foo111  # cls1が表示される  ●mdl1ではない。わからんでもない
puts "Cls5::Cls12.new.foo12   -> " + Cls5::Cls12.new.foo12   # cls1が表示される  ●mdl1ではない

puts "Cls5::CONST2            -> " + Cls5::CONST2            # mdl2
puts "Cls5.new.foo3           -> " + Cls5.new.foo3           # mdl2
puts "---"
puts "Cls6::CONST             -> " + Cls6::CONST             # cls61
puts "Cls6::CONST2            -> " + Cls6::CONST2            # cls62
puts "Cls6.new.foo1           -> " + Cls6.new.foo1           # cls1
puts "Cls6.new.foo2           -> " + Cls6.new.foo2           # mdl1
puts "Cls6.new.foo3           -> " + Cls6.new.foo3           # mdl2


#------------------------------------------------------------
# END
#------------------------------------------------------------