学习札记——ruby的对象模型

学习ruby一段时间,前段时间一直搞测试和环境部署,ruby基础的东西还不是很了解,买了一本《ruby元编程》一直没功夫细看,最近得了空,干脆系统学习下ruby的基本东西。

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:空间域名、网站空间、营销软件、网站建设、辽阳网站维护、网站推广。

看了书,最大的感受就是,ruby将一切皆是对象做的更彻底,所有的数据类型都是对象,”类本身也是对象“

首先我们来了解下,在ruby中对象怎么由什么构成的?

ruby中的对象是实例变量和对类实例方法的引用

代码

class MyClass
 def my_method
  @v =1
 end
end
obj = MyClass.new
obj = obj.my_method
puts obj.instance_variables

在ruby中,对象的实例变量,被理解为hash,键/值在不同对象可能不一样,实例变量被创建的时间,就是被赋值的时候。如果我们上面代码不执行my_method方法,将打印不出东西。

现在我们还要搞清楚一个东西,类方法实例方法

从调用来说凡是MyClass.my_methode的方法,叫类方法,

凡是MyClass.new.my_methode的方法,叫实例方法。

我们做一个实验

String.instance_methods == "abc".methods  ==> ture
String.methods == "abc".methods ==>falas

上面第二个实验说名,类方法与实例方法,是不一样的,如果你在String类方法不等于 实例后的实例方法(类方法还有new等一系列方法)

如果能打开对象,我们就只会看到对象只有实例变量和对一个类的引用,我们无法从实验来证明,但是我们可以这样推断为什么这么做,在我们实例多个对象后,他们共享一个类也就共享同样的方法,但是不同对象实例变量,可能不一样,所以实例变量保存在对象中。

为了什么类自身也是对象。

首先我们看一下下面的实验

"helloword".class  #=>String
String.class #=>Class

既然String都能被找到类,那么说明类本身也是对象。

还不信,那么我们再来做一个实验,首先我们知道一个类的方法就是他实例的实例方法

i=false
Class.instance_methods(i) #=> [:allocate, :new, :superclass]

看看吧 打印出来的东西,是不是有我们熟悉的东西,new,还有以前没有接触的allocate,和一个字面上也知道的东西superclass(超类)。

那我们就再来看看,审视类全貌把

String.superclass     #=>object
Object.superclass     #=>BasicObject
BasicObject.superclass    #=>nil

我们可以看到BasicObject是所有对象的节点。

那么我再来看看Class对象

Class.superclass   #==> Module
Module.superclass   #=>objectwoen

现在我们可以看到ruby整个ruby对象模型结构

那么当我们调用一个方法ruby又干了什么呢?

ruby中的怎么找到一个方法呢

我们定义的class与module在ruby中只是常量,在ruby查找方法,就像是文件系统,class与module充当的是dir的角色。

当调用某个方法后,我们要了解两个概念,一个是祖先链,一个是接受者,


标题名称:学习札记——ruby的对象模型
文章分享:http://pwwzsj.com/article/piioio.html