最初的代码如下:

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中,类方法和实例方法的一个有趣的例子的更多相关文章

  1. 举一个有趣的例子,让你轻松搞懂JVM内存管理

    目录 前言 例子 源码 输出 图解 深入分析 学以致用 写在最后 前言 在JAVA虚拟机内存管理中,堆.栈.方法区.常量池等概念经常被提到,对理论知识的理解也常常停留在字面意思上,比如说堆内存中存放对 ...

  2. java中使用split分割字符串一个有趣的现象

    最近在项目中,发现了一个bug,充分了展示了自己对java底层的认知有很多的不足和欠缺. 下面有段代码: String str="1#2#3"; String[] strs=str ...

  3. ruby中的整数、浮点数、字符串之间的相互转换

    D:\learnProg\Ruby>irb#浮点数转换成整数,会强行去掉小数点后面的数字 irb(main):017:0> 123.45.to_i => 123 #整数转换成浮点数, ...

  4. objective-c中类似ruby枚举类的实例方法

    虽然obj-c的语法格式略显繁琐,但它和ruby都从某些方面继承了smalltalk的某些动态的东西.这些东西是 C和C++之类的静态语言所不曾有的. 比如ruby中可以将一个类或对象的所有方法枚举出 ...

  5. OC类方法和实例方法中的self区别

    OC类方法和实例方法中的self Objective-C里面既有实例方法也类方法.类方法(Class Method) 有时被称为工厂方法(Factory Method)或者方便方法(Convenien ...

  6. dubbo debug过程中一个有趣的问题

    最近在debug dubbo代码过程中遇到的很有趣的问题 我们都知道dubbo ReferenceBean是消费者的spring bean包装,为了查一个consumer端的问题,在Reference ...

  7. objc中的类方法和实例方法有什么本质区别和联系

    类方法: 类方法是属于类对象的 类方法只能通过类对象调用 类方法中的self是类对象 类方法可以调用其他的类方法 类方法中不能访问成员变量 类方法中不能直接调用对象方法 类方法是存储在元类对象的方法缓 ...

  8. python中的类方法,实例方法和静态方法的区别

    类方法是类的方法,在定义的时候要在上方加上一个@classmethod装饰器来进行装饰,形参是cls,类和实例都可以取调用类方法: 实例方法是实例对象方法,只有实例可以调用,类是不能调用的,形参是se ...

  9. ruby 类方法、实例方法、类变量

    ###################### #类变量 ###################### class Cloud @@count=0 def initialize(user,passwor ...

随机推荐

  1. 移动web开发框架研究

    纯粹的总结一下移动web开发框架,移动web开发框架有jQuery Mobile .Sencha Touch等等,他们都来源于web开发,是成熟的框架.jQuery Mobile出自于jQuery家族 ...

  2. C#。4.1数组的应用

    数组的应用 (一).冒泡排序.1.冒泡排序是用双层循环解决.外层循环的是趟数,里层循环的是次数.2.趟数=n-1:次数=n-趟数.3.里层循环使用if比较相临的两个数的大小,进行数值交换. 代码 in ...

  3. 关于CSRF攻击及mvc中的解决方案 [ValidateAntiForgeryToken]

    http://blog.csdn.net/luck901229/article/details/8261640

  4. Android -------- 序列化器生成xml文件

  5. iOS 点击cell下拉

    iOS  点击cell下拉 代码如下: #import "ViewController.h" @interface ViewController ()<UITableView ...

  6. OC基础 NSDate

    OC基础  NSDate #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @auto ...

  7. HDU 5141

    这个题 LIS  +  并查集的思想 + 链式前向星 要求找s(i,j)使i j 能有最长的LIS  ... 做法是枚举每一个j 即终点  算 起点 的可能 无力吐槽了  bc 的时候写错了一个地方 ...

  8. UVa 10098: Generating Fast

    这道题要求按字典序生成字符串的全排列,不可重复(但字符可以重复,且区分大小写). 基本思路是先对输入的字符串按字典序排序,然后从第一位开始递归,从所有输入的字符中选出一个填充,然后再选第二位..... ...

  9. 利用.htaccess绑定域名到子目录

    前提首先得把域名绑定绑定了,比如把dev.ccvita.com解析到211.136.108.190这个IP其次是在网站管理面板里,为网站绑定dev.ccvita.com最后编辑配置.htaccess文 ...

  10. php目录分隔符DIRECTORY_SEPARATOR

    在windows我们习惯性的使用“\”作为文件分隔符,但是在linux上系统不认识这个标识,于是就要引入这个php内置变量了:DIRECTORY_SEPARATOR 路径分隔符 windows \ o ...