好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > Lua中的__index方法詳解

Lua中的__index方法詳解

熱門標簽:新岸線智能電銷機器人 武漢外呼防封系統多少錢 百度地圖標注早餐區域 怎么去除地圖標注 個人怎么在地圖標注需要的店鋪 清朝地圖標注哈爾濱 地圖標注大廈 漳州智云呼電話機器人 冀州市地圖標注

當我們訪問一個表的不存在的域,返回結果為nil,這是正確的,但并不一定正確。實際上,這種訪問觸發lua解釋器去查找__index metamethod:如果不存在,返回結果為nil;如果存在則由__index metamethod返回結果。

這個例子的原型是一種繼承。假設我們想創建一些表來描述窗口。每一個表必須描述窗口的一些參數,比如:位置,大小,顏色風格等等。所有的這些參數都有默認的值,當我們想要創建窗口的時候只需要給出非默認值的參數即可創建我們需要的窗口。第一種方法是,實現一個表的構造器,對這個表內的每一個缺少域都填上默認值。第二種方法是,創建一個新的窗口去繼承一個原型窗口的缺少域。首先,我們實現一個原型和一個構造函數,他們共享一個metatable:

復制代碼 代碼如下:

-- create a namespace
Window = {}
-- create the prototype with default values
Window.prototype = {x=0, y=0, width=100, height=100, }
-- create a metatable
Window.mt = {}
-- declare the constructor function
function Window.new (o)
    setmetatable(o, Window.mt)
    return o
end

現在我們定義__index metamethod:
復制代碼 代碼如下:

Window.mt.__index = function (table, key)
    return Window.prototype[key]
end

這樣一來,我們創建一個新的窗口,然后訪問他缺少的域結果如下:
復制代碼 代碼如下:

w = Window.new{x=10, y=20}
print(w.width)       --> 100

當Lua發現w不存在域width時,但是有一個metatable帶有__index域,Lua使用w(the table)和width(缺少的值)來調用__index metamethod,metamethod則通過訪問原型表(prototype)獲取缺少的域的結果。

__index metamethod在繼承中的使用非常常見,所以Lua提供了一個更簡潔的使用方式。__index metamethod不需要非是一個函數,他也可以是一個表。但它是一個函數的時候,Lua將table和缺少的域作為參數調用這個函數;當他是一個表的時候,Lua將在這個表中看是否有缺少的域。所以,上面的那個例子可以使用第二種方式簡單的改寫為:

復制代碼 代碼如下:

Window.mt.__index = Window.prototype

現在,當Lua查找metatable的__index域時,他發現window.prototype的值,它是一個表,所以Lua將訪問這個表來獲取缺少的值,也就是說它相當于執行:
復制代碼 代碼如下:

Window.prototype["width"]

將一個表作為__index metamethod使用,提供了一種廉價而簡單的實現單繼承的方法。一個函數的代價雖然稍微高點,但提供了更多的靈活性:我們可以實現多繼承,隱藏,和其他一些變異的機制。我們將在第16章詳細的討論繼承的方式。

您可能感興趣的文章:
  • Lua中強大的元方法__index詳解
  • Lua中的元方法__newindex詳解

標簽:天門 儋州 臺灣 天門 濰坊 金昌 德宏 宣城

巨人網絡通訊聲明:本文標題《Lua中的__index方法詳解》,本文關鍵詞  Lua,中的,index,方法,詳解,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Lua中的__index方法詳解》相關的同類信息!
  • 本頁收集關于Lua中的__index方法詳解的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 久久国产精品无码视欧美| 美女露胸无遮掩| 秋霞理论在线观看| 国产又爽?又黄?App| lubuntu网页版在线| 综合另类小说色区色噜噜| 捣烂宫口np失禁哭张开了h| 中国老太性开放| 欧美精产一区二区三区| 成人国产AV精品?免费| 国产日韩精品欧美一区 | 中文字幕日韩人妻在线视频| 巜饥渴的少妇HD高清| 欧美男同gay18视频网站| 青青青青久久精品国产一百度 | 久久综合99re88久久爱| 里番ACG??里番本子| 穿高跟鞋开裆丝袜做好爽| 男人女人啪啪的啪啪的| 国产精品秘?第一区在线| 伊人六月| 91艾栗栗24分钟国产在线播放| 国产9Ⅰ露脸色情按摩免费视频| 被男人调教| 体验区辣妞范1000部视频| 欧美日韩一区二区三区不卡视频| 剑阁县| h不戴套内s小说怀孕| 天天5g天天爽网站| 国产精品国产三级国产AⅤ入口| 日本成年网| 极品白嫩网红主播福利视频| 美女h视频| 色狐狸AV在线观看| 国产精品视频免费看人鲁| 免费一级婬片A片AAA毛片小说| 小sao货水真多把你cao烂视频| 国模白灵男女大尺度炮交| 艹逼逼网站| 国产精品一线二线三线| 重启2002免费观看完整版视频|