1.首先我們先了解下lua的表
2.元表
· 是用來定義對table操作的方式表
· 我們先來看一下問題
t1 =
t2 =
我們把這兩張錶拼起來
第一種方法
table.inster(t1,t2[1])
第二種方法
--元表
mt =
--方法類似於c++的運算子過載可以看出我們過載的是+
mt.__add =
function
( t1,t2 )
local temp =
for _,v in
pairs
(t1)
do table.
insert
(temp,v)
endfor _,v in
pairs
(t2)
do table.
insert
(temp,v)
endreturn temp
endt1 =
t2 =
setmetatable
(t1,mt)
--t3中就存了t1,t2的元素
t3 =t1+t2
3.元方法(雙_)
· __index
用來對錶訪問,但訪問時發現表中沒有這個鍵值那麼就會從設定的metarable中找到__index所對應的表中找鍵值沒有為nil
案例
other =
t=setmetatable
(t,)
print
(t["foo"])
--3print
(t["foo1"])
--nil
· __newindex
就是在對錶進行缺少賦值時比如t1.newkey = 6就會查詢__newindex對應的表然後存進去
案例
mytable1 =
mytable2 =
setmetatable
(mytable2,
)print
(mytable2.key1)
--value
mytable2.newkey =
"new1"
print
(mytable2.newkey,mytable1.newkey)
--nil new1
mytable2.key1 =
"new2"
print
(mytable2.key1,mytable1.key1)
--new2 nil(因為有這個鍵值)
mytable2[1]
=1print
(mytable2[2]
)
lua元表與元方法
lua中提供的元表 metatable 與元方法 metamethod 是一種非常重要的語法,metatable主要用於做一些類似於c 過載操作符式的功能。lua中提供的元表是用於幫助lua變數完成某些非預定義功能的個性化行為,如兩個table的相加,通過讓兩者指向同一元表並修改該元表的元方法可以實...
Lua 元表以及元方法
例如 a 10b 20print a b 我們可以得到30,但是如果兩個table型別相加呢?a b print a b 輸出結果是 lua hello world.lua 3 attempt to perform arithmetic on global a a table value stack...
Lua元表和元表方法
今天學習lua中的元表,書上講的太難懂了,網上搜尋教程也將的模模糊糊,搜了一會總結了一下經驗,跟大家分享一下,希望對您有所幫助。如何設定元表?local t local mt getmetatable t nil setmetatable t,mt 將t1設定為t的元表 getmetatable t...