Rubyの実装に疑問あり!
■ このスレッドは過去ログ倉庫に格納されています
0277デフォルトの名無しさん
NGNGメタクラスは()で囲んであらわすよ。
メタクラスは得意クラスなのでプログラマからは見えない(typeでクラスを調べるときスキップされるなど)から注意してね。
で、オブジェクトとクラスの関係は"=>"でサブクラスとスーパークラスの関係は"→"であらわします。
class A; end
var = A.new
は
A => (A) → (Object) → Class
で、Classのnewが呼び出されるって事になります。
また、普通のオブジェクトであれば、、、
a = A.new
a.__id__
は
a => A → Object
で、Objectの__id__が呼び出されることになります。
で、特異メソッドとかは、、、
class <<a
hoge(); end
end
a.hoge
a.__id__
は
a => singleton → A → Object
で、singletonのhogeとObjcetの__id__が呼び出されます。
singletonは無名の特異クラスなので同じくtypeなどではスキップされます。
つまり、メタクラスは特異クラスであり、クラスメソッドはメタクラスの特異メソッドであるわけで、プログラム上のクラスはClassと考えてもいいと思います。
RubyはPerlよりも簡単とか言われてますが、それはオブジェクト指向を理解している人には簡単だという事に、最近僕には思えるのですが、、、
そう言う意味ではオブジェクト指向を理解する為にRubyを学ぶことはいいことかも知れませんね。
■ このスレッドは過去ログ倉庫に格納されています