Re: [問題] method可以被使用的原因

作者: danny8376 (釣到一隻猴子@_@)   2016-03-26 16:26:39
※ 引述《rer429 (phoenix)》之銘言:
: 想請問一個很基本的問題,關於「method」為什麼可以使用。
: 我的理解中有三個可能:
: 1.這個class被創造的時候,本身就有定義這個method
: 2.他是另一個class的subclass,繼承了superclass的method
: 3. include了一個module,可以使用module的method
: 但當我在看ruby2.2.3文件的時候,發現ancestors這個method只有被定義在module中
: http://imgur.com/UGBKdQb
: 我的理解是:只有在繼承了module這個class的class可以用這個method,但....
: 但我卻可以使用在Symbol、Enumerable等「class」上
: http://imgur.com/kF9aauw
: 這有點超乎我的理解 QQ
: 希望能聽到各位大大的見解
: 謝謝
這邊就要述說一下ruby的物件結構啦
(注意大小寫意義不同 吧?)
首先
我們知道所有的class都是Class這個class的instance
所以不管是Fixnum, Module, Class, Object, Foo, Bar, ...
只要是class都是Class的instance
所以就來探究一下吧
Class.superclass => Module
所以說Class本身繼承了Module
自然任何class本身都會有Module這class內定義的方法
而Symbol Enumerable本身都是Class的instance
所以自然也能使用他的instance method
以上(不知道能不能理解XD
以下繼續離奇(?
Module.class => Class
顯然Module本身也是個Class的instance
所以他自己是他子類別的一個instance是吧XDDDDD
作者: rer429 (phoenix)   2016-03-26 16:58:00
感謝大大!!清楚又精闢
作者: mars90226 (火星人)   2016-03-27 01:46:00
http://goo.gl/ExK018 隨意找的Ruby Class架構圖這邊都還算還好,等到原原PO遇到eigenclass的時候...XD
作者: danny8376 (釣到一隻猴子@_@)   2016-03-27 02:56:00
eigenclass嗎wwwwwww 超自動化class處理機制wwww

Links booklink

Contact Us: admin [ a t ] ucptt.com