簡(jiǎn)單談?wù)凴uby的private和protected
下面這段程序讓我糾結(jié)了很久,Ruby中private的概念真的很奇怪。。。
class Test private def test_print puts 'test' end end class Test2 < Test def test_print2 # self.test_print #=> 這里加上self就不能調(diào)用,private method `test_print' called for # (NoMethodError) test_print #=> 不加self就能調(diào)用 end end Test2.new.test_print2
為什么不加self的話,private也可以調(diào)用父類的方法呢?
原來(lái)在Ruby中,private和Java或者其他語(yǔ)言不一樣,子類也可以調(diào)用,只是不能指定調(diào)用者。
翻了下《The Ruby Way》,書上說(shuō):
private:類和子類都能調(diào)用,但是private方法不能指定調(diào)用者,默認(rèn)為self。
protected:類和子類都能調(diào)用,可以指定調(diào)用者。
這就解釋了為什么上面的代碼中,用self調(diào)用會(huì)出錯(cuò),而不加self就能正確執(zhí)行。
相關(guān)文章
Ruby實(shí)現(xiàn)的最短編輯距離計(jì)算方法
這篇文章主要介紹了Ruby實(shí)現(xiàn)的最短編輯距離計(jì)算方法,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-05-05Ruby中XML格式數(shù)據(jù)處理庫(kù)REXML的使用方法指南
這篇文章主要介紹了Ruby中XML格式數(shù)據(jù)處理庫(kù)REXML的使用方法指南,值得注意的REXML庫(kù)處理XML字符串時(shí)的編碼問題,是需要的朋友可以參考下2016-04-04Ruby升級(jí)后no such file to load -- readline解決辦法
這篇文章主要介紹了Ruby升級(jí)后no such file to load -- readline解決辦法,需要的朋友可以參考下2015-04-04使用ruby部署工具mina快速部署nodejs應(yīng)用教程
這篇文章主要介紹了使用ruby部署工具mina快速部署nodejs應(yīng)用教程,包含mina的配置、運(yùn)行以及發(fā)布示例,需要的朋友可以參考下2014-09-09