うーん、整理して説明するのが難しいな・・・
まず、大前提として、Rubyでは全てがオブジェクトです。Classもオブジェクトです。そして、全てのオブジェクトは何らかのクラスのインスタンスです。ClassもClassのインスタンスです。ここまでいいですか?
さて、class構文でクラスを作成していますが、
と
Ruby
1class MyClass < Object
2end
と
と
Ruby
1MyClass = Class.new(Object)
は__ほぼ__同じです。厳密には前半二つと後半二つでは作られ方に微妙な違いがあるのですが、結果的に作られている物は同じです。
まず、最初の二つを見てください。Rubyでは<
を用いて親クラスを指定しなかった場合、< Object
とObjectが親クラスに指定された物と見なされます。どうしてそうなるかは仕様というしかありません。逆に言えば、クラスを作るときは本当は必ず親クラスの指定が必要なんだけど、< Object
の場合は省略しても良いということもできます。なので、目には見えない< Object
が本当は存在するため、Objectが親クラスになります。
次に、前半二つと後半二つの関係ですが、class構文は言ってみればClass.newの特別な書き方で、Classのインスタンスを作るということわかりやすく書けるようにしていると言えます。実質A = Array.new
とか書くのと変わりません。module構文も同じで、Module.newをしているだけです。なんら特別なことはしていません。後半二つの間の違いは親クラスの指定ですが、こちらもclass構文と同じで、省略したらObjectを指定したと見なされます。
そこで気付いたと思いますが、そう、class構文で作ったクラスもまた、ただの定数です。Class
もまたただの定数にすぎません。クラスになっている物もすべて他の定数と同じように扱われ、それ以上でもそれ以下でもありません。ただそれらがClassのインスタンスであり、(削除をしていない限り)new
メソッドを呼び出すとそのインスタンスを作るという動きになっているだけにすぎません。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/04/26 03:28
2016/04/26 03:55
2016/04/26 12:11
2016/04/26 14:05
2016/05/03 07:36