どこかでメモを逃してしまったので、説明していただければ幸いです。
オブジェクトの固有クラスが異なるのはなぜself.class
ですか?
class Foo
def initialize(symbol)
eigenclass = class << self
self
end
eigenclass.class_eval do
attr_accessor symbol
end
end
end
固有クラスをclass.self
と同等にする私の一連のロジックはかなり単純です。
class << self
インスタンスメソッドではなく、クラスメソッドを宣言する方法です。へのショートカットdef Foo.bar
です。
したがって、クラスオブジェクトへの参照内では、返されるのself
はと同じである必要がありますself.class
。これは、クラスのメソッド/属性の定義ににclass << self
設定さself
れるFoo.class
ためです。
私はただ混乱していますか?それとも、これはRubyメタプログラミングの卑劣なトリックですか?