

Railsのソースを読むと、

ActiveSupportのAutoloadで、

以下のようなコードがありました。

[code]

    def self.extended(base) # :nodoc:
          base.class_eval do
            @_autoloads = {}
            @_under_path = nil
            @_at_path = nil
            @_eager_autoload = false
          end
    end
    
[/code]

extendされた際に、そのクラスに対して

クラスインスタンス変数を定義しているのですが

クラス変数を利用していないのは何故でしょうか？

クラスインスタンス変数とは違い、  
クラス変数の場合は、継承先で親の変数を参照できるため、  
上記のコードと同じ動作になると思っています。


CC BY-SA 3.0
2015-10-13T23:17:03.463
17615
2016-03-13T04:00:20.200
2015-10-15T00:52:00.817
12765
12765
question
ruby-on-rails ruby
self.extendedからbase.class_evalでインスタンス変数を初期化するのはなぜ？


自己解決致しました。

extendする際、クラス変数だと継承先で参照できないため、  
self.extendedで、継承先にクラスインスタンス変数を定義していました。


CC BY-SA 3.0
2015-10-15T01:05:27.897
17659
2015-10-15T01:05:27.897
12765
17615
answer