なかだです。 At Sat, 16 Jun 2001 05:29:58 +0900, IKEGAMI Daisuke <daisu-ik / is.aist-nara.ac.jp> wrote: > module A > class A > end > end > > include A > A.new # => undefined method `new' for A:Module (NameError) これは include した ::A の持つ A::A よりも、同じスコープで直 接見える ::A の方が優先されるからです。 > module A > class A > end > end > > class B > include A > attr_reader :a > def initialize > @a = A.new > end > end > b = B.new # => succeed > p b.a # => <A::A:ruby's internal symbol> こちらは module A は class B の外部にある名前なので、include した名前よりもさらに優先度は下がります。include した時点では外 部の ::A しか見えませんが、それ以降では A::A が見えますから。 やや正確さに欠けますが、検索順序は 1) 現在のスコープから外部のスコープへ。 2) あるスコープ内では現在の class から super class へ、もしくは 現在の module から include した module へ。 3) ある class/module 内では直接定義されたものから include した ものへ。 > A::A なんてふつうつくらねーよという声が聞こえてきそうだ… なくはないと思いますが。 -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦