温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2020-07-16 05:58:52 来源:网络 阅读:428 作者:JackSongBlack 栏目:编程语言

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

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



向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI