Ruby中,类方法和实例方法的一个有趣的例子
2013-09-26 00:25
260 查看
最初的代码如下:
修改一下:
再修改一下:
究其原因:
1、类方法,是“该类的单例类”的实例方法;
2、Object类的单例类的父类是Class类,Object类同时又是Class类的父类:得出结论,Object类是它的单例类的父类,也就是说,Object类的实例方法,也是它的类方法
3、实例方法的查找过程只查找类的继承层次,而不会查找单例类
4、补充一下,类的继承层次,在单例类中被保持住,比如class A < B,则A的单例类也继承自B的单例类
参见:
1、浅析 ruby meta-class - 坏份子 - 博客园
2、Ruby的对象模型_老王的技术手册
class Object def abc p "instance abc" end def self.abc p "class abc" end end obj=Object.new obj.abc #instance abc Object.abc #class abc
修改一下:
class Object def abc p "instance abc" end end obj=Object.new obj.abc #instance abc Object.abc #instance abc
再修改一下:
class Object def self.abc p "class abc" end end obj=Object.new obj.abc #error: undefined method 'abc' for xxx Object.abc #class abc
究其原因:
1、类方法,是“该类的单例类”的实例方法;
2、Object类的单例类的父类是Class类,Object类同时又是Class类的父类:得出结论,Object类是它的单例类的父类,也就是说,Object类的实例方法,也是它的类方法
3、实例方法的查找过程只查找类的继承层次,而不会查找单例类
4、补充一下,类的继承层次,在单例类中被保持住,比如class A < B,则A的单例类也继承自B的单例类
参见:
1、浅析 ruby meta-class - 坏份子 - 博客园
2、Ruby的对象模型_老王的技术手册
相关文章推荐
- Ruby中,类方法和实例方法的一个有趣的例子
- 【转】jQuery+Ajax+PHP登录实例 一个简单的用Jquery中ajax方法登录的例子
- 一个最简单的SOAP客户端与服务端测试实例(主要是该例子一个类中写了多个方法)
- 一个利用扩展方法的实例:AttachDataExtensions 转自 博客园 JeffreyZha
- Java反射之通过反射获取一个对象的方法信息(实例代码)
- 程序只启动一个实例的几种方法
- 一个功能齐全的DataGrid分页例子(两种方法)
- 《程序只启动一个实例的几种方法》一文的补充
- 关于Drawable资源被用在多个地方显示图片时,改变其中一个实例的状态会同时作用到其他实例的解决方法
- JS调用OC简单实例-传递一个或者多个参数给oc方法
- CUDA by Example 4.2.2 一个有趣的例子 之 #include "gl_helper.h"
- 一个简单的ASP.NET Forms 身份认证的实例方法
- sqlserver实例无法加锁或者多于一个的连接时处理方法
- 这是一个非常有趣的例子!(DotNET密码系统)
- Windows下,当一个文件夹里包含几十万个1K左右的小文件时(举个例子),最有效的删除方法。
- 求一个分割函数方法的4种方法实例
- 在看官方的例子时候由一个grid实例,在每一行之前有个加号,展开可以显示内容,在实际应用中还是非常有用的,照搬例子的代码,发现老是提示对象不存在,查阅资料后发现是没有加载插件,这里和大家分享下Ext.grid.RowExpander插件的使用,
- SQLServer2000或者补丁安装程序提示“有一个挂起的安装实例,请重起机器”的解决方法
- 一个例子弄懂invoke方法
- ruby 的initialize方法 and 实例变量是怎么样工作的