method_missing
ボキャブラリで名前空間定数のクラスを定義するために使用しています。効果的にするには、語彙クラスを から継承する必要がありますBasicObject
。そうしないと、語彙用語として標準オブジェクト メソッドを使用できません (メソッドが欠落していないためです :)。ただし、から継承するとBasicObject
、別のモジュールでユーティリティ メソッドを呼び出すことができないことがわかります。次のコードは、要約された形式で問題を示しています。
module Foo
class Bar
def self.fubar( s )
"#{s} has been fubar'd"
end
end
end
class V1
def self.method_missing( name )
Foo::Bar.fubar( "#{name} in v1" )
end
end
class V2 < BasicObject
def self.method_missing( name )
Foo::Bar.fubar( "#{name} in v2" )
end
end
# this works
puts V1.xyz
# => xyz in v1 has been fubar'd
# this doesn't
puts V2.xyz
# => NameError: uninitialized constant V2::Foo
V2
ヘルパー モジュールを呼び出そうとしたときに、初期化された定数エラーが発生しないようにするには、何を追加する必要がありますか?