婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > ruby元編程之method_missing的一個使用細節

ruby元編程之method_missing的一個使用細節

熱門標簽:常德電銷平臺外呼系統軟件價格 百度地圖標注自定義圖片 白銀外呼paas系統 湖州u友防封電銷卡 電銷機器人廠商代理 地圖標注賺錢項目注冊 高德地圖標注客服 徐州網絡外呼系統哪個好 滴滴外呼系統

我們知道頂級域,定義域的self是啥?

復制代碼 代碼如下:

puts self    #main
puts self.class #Object

我們知道當一個方法被調用的時候,如果沒有對象接受,默認就是self,如:
復制代碼 代碼如下:

def tell_me_who
    puts self
end
tell_me_who  #main

 方法調用是這樣的步驟,先查找當前對象的所在類的實例方法存在方法與否,如果存在,調用方法,如果不存在則查看superclass,直到 BasicObject都沒找到對于方法的話,就會調用Kernel的method_missing()方法,并且報錯,如
復制代碼 代碼如下:

Error:test.rb:8: undefine: undefined local variable or method `ask' for main:Object (NameError)

 注意報錯的信息,我們可以發現,當我們調用一個不存在的變量的時候,也是會追溯到Kernel的method_missing方法的,這里要注意咯。

驗證:

復制代碼 代碼如下:

puts self    #main
puts self.class #Object
def self.method_missing(name,*arg)
    puts "#{name} is not exist!"
end
puts ask   #ask is not exist!

 一個案例導致BUG:
復制代碼 代碼如下:

def self.method_missing(name,*arg)
    1.times do
        puts method_name=name
    end
    puts "#{method_name} is not exist!"
end

ask #變量或者方法

意圖:讓任何未定義的變量或者方法,都打印一次
可是,這是一個死循環?看出問題了嗎
ask被執行,可是沒有定義ask,就會轉到method_missing,
method_name在times的block中,出了作用域了,所以又會執行method_missing,變成了死循環。

您可能感興趣的文章:
  • Ruby元編程的一些值得注意的地方
  • ruby元編程之創建自己的動態方法
  • Ruby元編程之夢中情人method_missing方法詳解
  • Ruby元編程技術詳解(Ruby Metaprogramming techniques)
  • Ruby元編程小結
  • Ruby和元編程之萬物皆為對象
  • ruby元編程實際使用實例
  • Ruby元編程基礎學習筆記整理

標簽:永州 三沙 普洱 梧州 荊門 張家界 遼寧 公主嶺

巨人網絡通訊聲明:本文標題《ruby元編程之method_missing的一個使用細節》,本文關鍵詞  ruby,元,編程,之,method,missing,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《ruby元編程之method_missing的一個使用細節》相關的同類信息!
  • 本頁收集關于ruby元編程之method_missing的一個使用細節的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 德保县| 清原| 马关县| 宣汉县| 旺苍县| 丰都县| 郯城县| 大兴区| 图们市| 蚌埠市| 桓仁| 盐亭县| 新和县| 文水县| 图木舒克市| 土默特右旗| 萝北县| 芜湖市| 曲沃县| 芮城县| 宣化县| 郎溪县| 曲麻莱县| 海原县| 禹州市| 武定县| 玉树县| 天全县| 平阴县| 南乐县| 绥宁县| 新乐市| 蕉岭县| 漾濞| 来宾市| 西峡县| 西充县| 昭苏县| 吴旗县| 金昌市| 安乡县|