私は、メソッドと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を呼び出していることを保証する::)
こんにちは!返事をありがとう、私はクラスを拡張せずにこれを行うことができない理由を説明できますか?ちょっと興味があるんだけど。 – huhucat
'const_missing'は、欠落している定数を参照するオブジェクトの属性である必要があるためです。そのため、モジュール内の定数を参照するか、クラス内にメソッドを継承したり継承したりする必要があります。字句を囲む範囲は、定数を定義するときに重要ですが、他のオブジェクトへのアクセスにはほとんど関係ありません。 (名前空間を修飾する方法を除いて) – DigitalRoss