2011-07-27 2 views
1

私は、メソッドとSunflowerというクラスを内部に持つPlantsというモジュールを持っています。未定義の定数を呼び出すと、モジュール内のconst_missingメソッドが呼び出されません。代わりにObjectクラス内のconst_missingが呼び出されます。モジュール内部のconst_missingをトリガーする方法はありますか?Ruby - トップレベルではなくモジュール内でconst_missingを取得

module Plants 
     def self.const_missing(name) 
       puts name 
     end 

     class Sunflower 
       def some_method 
         Grass 
       end 
     end 
end 


obj = Plants::Sunflower.new 
obj.some_method 

ありがとうございます!

どちらかが

def some_method 
    ::Plants::Grass 
end 

にお電話を変更するには、植物::草

または移動ひまわりにconst_missingを呼び出していることを保証する::)

答えて

3
module Plants 

    def const_missing(name) 
    puts name 
    end 

    class Sunflower 
    extend Plants 
    def some_method 
     Grass 
    end 
    end 
end 
+0

こんにちは!返事をありがとう、私はクラスを拡張せずにこれを行うことができない理由を説明できますか?ちょっと興味があるんだけど。 – huhucat

+0

'const_missing'は、欠落している定数を参照するオブジェクトの属性である必要があるためです。そのため、モジュール内の定数を参照するか、クラス内にメソッドを継承したり継承したりする必要があります。字句を囲む範囲は、定数を定義するときに重要ですが、他のオブジェクトへのアクセスにはほとんど関係ありません。 (名前空間を修飾する方法を除いて) – DigitalRoss

1

は、次の2つの方法があります。クラス

関連する問題