亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

學習札記——ruby的對象模型

發布時間:2020-07-16 05:58:52 來源:網絡 閱讀:444 作者: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

汕尾市| 赫章县| 阜南县| 介休市| 肇州县| 阜城县| 营山县| 灵璧县| 水城县| 江都市| 盐津县| 海兴县| 福清市| 社旗县| 吴堡县| 和田市| 崇礼县| 调兵山市| 富宁县| 双辽市| 雷山县| 唐海县| 阜平县| 卢湾区| 奉新县| 福州市| 辽宁省| 桦甸市| 灵武市| 安陆市| 依安县| 台东县| 衡阳市| 固原市| 民县| 家居| 广汉市| 昌平区| 鄂州市| 玛纳斯县| 松江区|