學(xué)習(xí)ruby一段時(shí)間,前段時(shí)間一直搞測(cè)試和環(huán)境部署,ruby基礎(chǔ)的東西還不是很了解,買了一本《ruby元編程》一直沒功夫細(xì)看,最近得了空,干脆系統(tǒng)學(xué)習(xí)下ruby的基本東西。
專業(yè)成都網(wǎng)站建設(shè)公司,做排名好的好網(wǎng)站,排在同行前面,為您帶來客戶和效益!創(chuàng)新互聯(lián)公司為您提供成都網(wǎng)站建設(shè),五站合一網(wǎng)站設(shè)計(jì)制作,服務(wù)好的網(wǎng)站設(shè)計(jì)公司,成都做網(wǎng)站、成都網(wǎng)站建設(shè)負(fù)責(zé)任的成都網(wǎng)站制作公司!看了書,大的感受就是,ruby將一切皆是對(duì)象做的更徹底,所有的數(shù)據(jù)類型都是對(duì)象,”類本身也是對(duì)象“
首先我們來了解下,在ruby中對(duì)象怎么由什么構(gòu)成的?
ruby中的對(duì)象是實(shí)例變量和對(duì)類實(shí)例方法的引用!
代碼
class MyClass def my_method @v =1 end end obj = MyClass.new obj = obj.my_method puts obj.instance_variables
在ruby中,對(duì)象的實(shí)例變量,被理解為hash,鍵/值在不同對(duì)象可能不一樣,實(shí)例變量被創(chuàng)建的時(shí)間,就是被賦值的時(shí)候。如果我們上面代碼不執(zhí)行my_method方法,將打印不出東西。
現(xiàn)在我們還要搞清楚一個(gè)東西,類方法與實(shí)例方法
從調(diào)用來說凡是MyClass.my_methode的方法,叫類方法,
凡是MyClass.new.my_methode的方法,叫實(shí)例方法。
我們做一個(gè)實(shí)驗(yàn)
String.instance_methods == "abc".methods ==> ture String.methods == "abc".methods ==>falas
上面第二個(gè)實(shí)驗(yàn)說名,類方法與實(shí)例方法,是不一樣的,如果你在String類方法不等于 實(shí)例后的實(shí)例方法(類方法還有new等一系列方法)
如果能打開對(duì)象,我們就只會(huì)看到對(duì)象只有實(shí)例變量和對(duì)一個(gè)類的引用,我們無法從實(shí)驗(yàn)來證明,但是我們可以這樣推斷為什么這么做,在我們實(shí)例多個(gè)對(duì)象后,他們共享一個(gè)類也就共享同樣的方法,但是不同對(duì)象實(shí)例變量,可能不一樣,所以實(shí)例變量保存在對(duì)象中。
為了什么類自身也是對(duì)象。
首先我們看一下下面的實(shí)驗(yàn)
"helloword".class #=>String String.class #=>Class
既然String都能被找到類,那么說明類本身也是對(duì)象。
還不信,那么我們?cè)賮碜鲆粋€(gè)實(shí)驗(yàn),首先我們知道一個(gè)類的方法就是他實(shí)例的實(shí)例方法
i=false Class.instance_methods(i) #=> [:allocate, :new, :superclass]
看看吧 打印出來的東西,是不是有我們熟悉的東西,new,還有以前沒有接觸的allocate,和一個(gè)字面上也知道的東西superclass(超類)。
那我們就再來看看,審視類全貌把
String.superclass #=>object Object.superclass #=>BasicObject BasicObject.superclass #=>nil
我們可以看到BasicObject是所有對(duì)象的節(jié)點(diǎn)。
那么我再來看看Class對(duì)象
Class.superclass #==> Module Module.superclass #=>objectwoen
現(xiàn)在我們可以看到ruby整個(gè)ruby對(duì)象模型結(jié)構(gòu)
那么當(dāng)我們調(diào)用一個(gè)方法ruby又干了什么呢?
ruby中的怎么找到一個(gè)方法呢
我們定義的class與module在ruby中只是常量,在ruby查找方法,就像是文件系統(tǒng),class與module充當(dāng)?shù)氖莇ir的角色。
當(dāng)調(diào)用某個(gè)方法后,我們要了解兩個(gè)概念,一個(gè)是祖先鏈,一個(gè)是接受者,
創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國(guó)云服務(wù)器,動(dòng)態(tài)BGP最優(yōu)骨干路由自動(dòng)選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動(dòng)現(xiàn)已開啟,新人活動(dòng)云服務(wù)器買多久送多久。