__index和__newindex實際上相當于是在讀寫表的時候分别加了一道過濾的邏輯,讓讀寫表的操作可以被監控或說回調,利用這個特性可以實作一些帶有特殊功能的表。
帶有預設值的表:


一般通路不存在的域會傳回nil,但經過上面代碼處理後,通路不存在的域會傳回一個預設值。為了實作公用metatable,可以将代碼封裝如下:
監控表(代理表):


對上述代碼進行一些适當的封裝,将原始表作為代理表的一個特殊的域對應的值:


隻讀表:


上述利用__index和__newindex特性來實作的一些具有特殊表的方法都比較簡單易懂,而且很好用。
http://www.cnblogs.com/sifenkesi/p/3837944.html