学习札记——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的角色。

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

创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。


分享标题:学习札记——ruby的对象模型-创新互联
本文网址:http://myzitong.com/article/djccos.html