天天看點

利用__index和__newindex實作預設值表、監控表、隻讀表(轉)

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

  帶有預設值的表:

利用__index和__newindex實作預設值表、監控表、隻讀表(轉)
利用__index和__newindex實作預設值表、監控表、隻讀表(轉)

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

  監控表(代理表):

利用__index和__newindex實作預設值表、監控表、隻讀表(轉)
利用__index和__newindex實作預設值表、監控表、隻讀表(轉)

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

利用__index和__newindex實作預設值表、監控表、隻讀表(轉)
利用__index和__newindex實作預設值表、監控表、隻讀表(轉)

  隻讀表:

利用__index和__newindex實作預設值表、監控表、隻讀表(轉)
利用__index和__newindex實作預設值表、監控表、隻讀表(轉)

  上述利用__index和__newindex特性來實作的一些具有特殊表的方法都比較簡單易懂,而且很好用。

http://www.cnblogs.com/sifenkesi/p/3837944.html