私は自分のクラス (またはモジュールのように振る舞う)を階層の間BasicObject
に挿入する方法を目指しています (または、モジュールのように動作します)。これは私のテスト設定です:Object
Objects
module Entity
# Define the singleton method Entity::new such that it generates and returns
# a class which extends Entity.
def self.new(*args, &blk)
c = Class.new(*args, &blk)
c.extend self
c
end
# Singleton method
def self.foo
puts 'foo'
end
# Instance method
def bar
puts 'bar'
end
end
次に、 s のクラスThing
を作成すると、希望する出力に近づきます。include
Entity
thing = Thing.new
thing.bar #=> bar
Thing.foo #=> NoMethodError
のインスタンスは でThing
定義したインスタンス メソッドを継承しますEntity
が、クラスは残念ながらThing
のシングルトン メソッドを継承しません。Entity
クラスEntity
を開いて を含めてすべてのオブジェクトに動作を追加しようとすると、すべてのオブジェクトが のインスタンス メソッドを継承するだけでなく、シングルトン メソッドとしても継承します。Object
Entity
Entity
class Object; include Entity; end
Object.bar #=> bar
Object.new.bar #=> bar
class Bob; end
Bob.bar #=> bar
Bob.new.bar #=> bar
これは私が欲しいものではありません。すべてのオブジェクトが で定義されている動作を定義Entity
どおりに継承するようにしたいので、Object
inheritのインスタンス メソッドのインスタンスと、標準の継承と同様に、inheritのシングルトン メソッドEntity
から継承するクラスが生成されます。これを達成するために行ったことをどのように変更できますか?Object
Entity