method_missing是一種常用的技術(shù),它的基本思想是通過實(shí)現(xiàn)方法來回調(diào)不存在的方法,有需要的朋友可以跟隨武林技術(shù)頻道小編的步伐進(jìn)入下文看看吧!
我們知道當(dāng)一個(gè)方法被調(diào)用的時(shí)候,如果沒有對(duì)象接受,默認(rèn)就是self,如:
?
?
?方法調(diào)用是這樣的步驟,先查找當(dāng)前對(duì)象的所在類的實(shí)例方法存在方法與否,如果存在,調(diào)用方法,如果不存在則查看superclass,直到 BasicObject都沒找到對(duì)于方法的話,就會(huì)調(diào)用Kernel的method_missing()方法,并且報(bào)錯(cuò),如
?
?
?注意報(bào)錯(cuò)的信息,我們可以發(fā)現(xiàn),當(dāng)我們調(diào)用一個(gè)不存在的變量的時(shí)候,也是會(huì)追溯到Kernel的method_missing方法的,這里要注意咯。
?
驗(yàn)證:
?一個(gè)案例導(dǎo)致BUG:
?
?
ask #變量或者方法
?
意圖:讓任何未定義的變量或者方法,都打印一次
可是,這是一個(gè)死循環(huán)?看出問題了嗎
ask被執(zhí)行,可是沒有定義ask,就會(huì)轉(zhuǎn)到method_missing,
method_name在times的block中,出了作用域了,所以又會(huì)執(zhí)行method_missing,變成了死循環(huán)。
上文所述的ruby元編程之method_missing的使用細(xì)節(jié),大家了解了嗎?當(dāng)前武林技術(shù)頻道的知識(shí)還是有很多的,由于篇幅的有限。我們就為大家介紹到這里了!
|
新聞熱點(diǎn)
疑難解答
圖片精選