1:元表與元方法
a= b={}
setmetatable(b,a)
測試001:
print(a.age) ----> a age 18
print(b.age) ----> nil
測試002:
a.__index = a
print(a.age) ----> a age 18
print(b.age) ----> a age 18
測試003-1:
a.orz = 99
b.orz = 100
print(b.orz) ----> 100
測試003-2:
a.orz = 99
a.__newindex = function () print("a new index") end
b.orz = 100
print(b.orz) -----> 99 (a:b在給字段orz賦值的時候,會調元表裡面的元方法__newindex,調完之後b.orz並沒有賦值,列印b.orz的時候,發現沒有值,去訪問元表中的元方法__index,---> 99 )
當設定乙個 table key的value值時,先訪問table的元表中的元方法__newindex,(如果table的元表裡面重新定義了__newindex,將會呼叫元表中的元方法__newindex)
總結:__index 和 __newindex 都是在table中沒有所需訪問的index時才發揮作用。
2: 具有預設值的table
其實就是設定了 table 的元表,在元表裡面重寫元方法 __index ,這個方法返回乙個 固定的值,比如 0 或者 1
3:唯讀的table
function readonly(t)
table proxy = {}
table mt =
setmetatable(proxy,mt)
return proxy
end****************************************===
用上述的方法返回乙個唯讀的table ( readonly())
lua元表與元方法
1.首先我們先了解下lua的表 2.元表 是用來定義對table操作的方式表 我們先來看一下問題 t1 t2 我們把這兩張錶拼起來 第一種方法 table.inster t1,t2 1 第二種方法 元表 mt 方法類似於c 的運算子過載可以看出我們過載的是 mt.add function t1,t2...
lua元表與元方法
lua中提供的元表 metatable 與元方法 metamethod 是一種非常重要的語法,metatable主要用於做一些類似於c 過載操作符式的功能。lua中提供的元表是用於幫助lua變數完成某些非預定義功能的個性化行為,如兩個table的相加,通過讓兩者指向同一元表並修改該元表的元方法可以實...
Lua語言學習之元表與元方法
元表與元方法 在學習table的時候已經提到這兩個概念。其實,可以把這兩個概念和c 中的運算子過載進行比較,在功能上確有相似性。例如,c 中自定義的型別不能進行數 算,但是我們可以過載運算子就可以 進行數 算操作。lua中就是用元表和元方法來實現這個功能的。lua中的 table 都可以有元表,我們...