rubyでextend Mod

985 ワード


rubyではすべてのオブジェクトは言うまでもなく、オブジェクトのメソッドはオブジェクトのポインタklassによって他のクラスを指し、このオブジェクトのメソッドはこのクラスに定義されています.クラスがObjectのサブクラスである場合、このクラスのインスタンス化されたすべてのオブジェクトのメソッドはこのクラスに定義され、これらのオブジェクトのklassポインタもこのクラスを指します.rubyの1つのオブジェクトの角度から見ると、そのオブジェクトに1つのメソッド(彼自身にしかないメソッド)を定義すると、このオブジェクトは虚クラス-metaclassを作成するので、このオブジェクトに定義されたメソッドは、このオブジェクトのklassポインタが指すクラス(metaclass)に確立されます.本題に戻れextend Modはこのようにこのオブジェクトがモジュール内のインスタンスメソッドを持つようになり,上端ではオブジェクトのために独自のメソッドを構築することが虚クラスに置かれることが明らかになったので,拡張されたインスタンスメソッドがそのmetaclassに置かれた.OK、これといえばclass< class AClass extend AMod end
ここではextend AModが実際にselfであることを説明する.extend AModは,実際に参照したモジュールのインスタンスメソッドをこのクラスのクラスメソッドとして定義していることが知られているが,原理的にはself,すなわちこのクラスオブジェクト自体に独自のメソッドを追加することである--これがいわゆるクラスメソッドである.