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