作者danny8376 (钓到一只猴子@_@)
看板Ruby
标题Re: [问题] method可以被使用的原因
时间Sat Mar 26 16:26:39 2016
※ 引述《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
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.32.142.161
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Ruby/M.1458980803.A.E2C.html
※ 编辑: danny8376 (114.32.142.161), 03/26/2016 16:31:42
1F:推 rer429: 感谢大大!!清楚又精辟 03/26 16:58
3F:→ mars90226: 这边都还算还好,等到原原PO遇到eigenclass的时候...XD 03/27 01:47
4F:→ danny8376: eigenclass吗wwwwwww 超自动化class处理机制wwww 03/27 02:56