av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

Ruby訪問(wèn)控制特殊方法介紹

通過(guò)對(duì)Ruby語(yǔ)言的學(xué)習(xí),我們可以知道, 它是一種特殊的編程語(yǔ)言。特殊之處在于沒(méi)有函數(shù),只有方法。下面就向大家介紹一種特殊方法,Ruby訪問(wèn)控制。#t#

創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),汕城企業(yè)網(wǎng)站建設(shè),汕城品牌網(wǎng)站建設(shè),網(wǎng)站定制,汕城網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷(xiāo),網(wǎng)絡(luò)優(yōu)化,汕城網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專(zhuān)業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

想想當(dāng)我們?cè)?***層"而不是在一個(gè)類(lèi)的定義里定義一個(gè)方法時(shí)會(huì)發(fā)生什么.我們可以把這樣的方法設(shè)想為在像C那樣的傳統(tǒng)語(yǔ)言中的函數(shù)的類(lèi)似物.

  1. ruby> def square(n)   
  2. | n * n   
  3. | end   
  4. nil   
  5. ruby> square(5)   
  6. 25   

 

Ruby訪問(wèn)控制看起來(lái)不屬于任何類(lèi),但實(shí)際上Ruby將其分給Object類(lèi),也就是所有其它類(lèi)的父類(lèi).因此,所有對(duì)象現(xiàn)在都可以使用這一方法.這本應(yīng)是正確的,但有個(gè)小陷阱:它是所有類(lèi)的私有(private)方法.我們將在下面討論這是什么意思,但一個(gè)結(jié)果是它只能以函數(shù)的風(fēng)格調(diào)用,像這樣:

 
 
 
  1. ruby> class Foo   
  2. | def fourth_power_of(x)   
  3. | square(x) * square(x)   
  4. | end   
  5. | end   
  6. nil   
  7. ruby> Foo.new.fourth_
    power_of 10   
  8. 10000   

 

我們不允許向一個(gè)對(duì)象明確地運(yùn)用Ruby訪問(wèn)控制這一方法:

 
 
 
  1. ruby> "fish".square(5)   
  2. ERR: (eval):1: private method 
    `square' called for "fish":String   

 

這一聰明的做法在 ruby 使得提供可以像在傳統(tǒng)語(yǔ)言中那樣運(yùn)用函數(shù)的同時(shí)保持了 ruby 的純OO性質(zhì)(函數(shù)仍是對(duì)象方法,但接受者隱式的為self).

在OO編程里,有一個(gè)不成文的習(xí)慣,我們?cè)谇懊娴恼鹿?jié)里有所暗示的,即有關(guān)規(guī)格(specification)和實(shí)現(xiàn)(implementation)的區(qū)別,或者說(shuō)對(duì)象被要求完成什么任務(wù)和實(shí)際上它是怎樣完成的.

對(duì)象的內(nèi)部工作應(yīng)該對(duì)用戶保持隱蔽;他們應(yīng)該只關(guān)心輸入什么和輸出什么,并相信對(duì)象知道它在內(nèi)部是在做什么.如此,某些外面世界看不見(jiàn)但卻在內(nèi)部使用(并可以由程序員在任何需要的時(shí)候改進(jìn),而不用改變用戶看到的類(lèi)的對(duì)象)的方法將很有用.在下面這個(gè)普通的例子里,你可以把engine看作類(lèi)的內(nèi)部隱式方法.

 
 
 
  1. ruby> class Test   
  2. | def times_two(a)   
  3. | print a," times two is ",engine(a),"\n"   
  4. | end   
  5. | def engine(b)   
  6. | b*2   
  7. | end   
  8. | private:engine # this hides 
    engine from users   
  9. | end   
  10. Test   
  11. ruby> test = Test.new   
  12. #   
  13. ruby> test.engine(6)   
  14. ERR: (eval):1: private method 
    `engine' called for #   
  15. ruby> test.times_two(6)   
  16. 6 times two is 12.   
  17. nil  

 

開(kāi)始時(shí),我們本希望test.engine(6)返回12,但隨后當(dāng)我們扮演一個(gè)Test對(duì)象用戶時(shí)我們了解到engine是不可訪問(wèn)的(inaccessible).只有Test的其它方法,像 times_two可以使用 engine.

我們被要求保持程序的外部接口,也就是 times_two這些方法.管理此類(lèi)的程序員可以自由的更改engine(這里,可能把b*2改為b+b,假設(shè)這樣可以提高性能)而不影響用戶與 Test 對(duì)象打交道.這個(gè)例子當(dāng)然過(guò)于簡(jiǎn)單;Ruby訪問(wèn)控制的優(yōu)點(diǎn)只有當(dāng)我們開(kāi)始寫(xiě)更復(fù)雜和有趣的類(lèi)時(shí)方能顯現(xiàn)出來(lái).


網(wǎng)站名稱:Ruby訪問(wèn)控制特殊方法介紹
網(wǎng)址分享:http://uogjgqi.cn/article/djhseie.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們?cè)谖⑿派?4小時(shí)期待你的聲音

解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流