lua元表 簡單例子

2022-03-15 03:28:09 字數 1259 閱讀 2456

set ={}

set.mt = {}--

定義普通的表作為元表,為了避免命名汙染直接放在set內部

function

set.new(t)

local set ={}

setmetatable(set, set.mt)--

一組相關的表共享乙個metatable(通過這個可以描述他們共同的行為),乙個表也可以是自身的metatable(描述私有行為)

for _, l in

ipairs(t) do set[l] = true

endreturn

setend

function

set.union(a, b)

local res =set.new{}

for k in

pairs(a) do res[k] = true

endfor k in

pairs(b) do res[k] = true

endreturn

resend

function

set.intersection(a, b)

local res =set.new{}

for k in

pairs(a) do

res[k] =b[k]

endreturn

resend

function set.tostring

(set)

local s = "

"end

function set.print

(s)

print(set.tostring

(s))

end--

建立的表有相同的元表

s1 = set.new

s2 = set.new

print(getmetatable

(s1))

print(getmetatable

(s2))

set.mt.__add = set.union--

給元表設定__add函式

--當lua試圖對兩個表進行相加時,會檢查兩個表是否有乙個表有metatable,並且檢查metatable是否有__add域,如果有直接呼叫元方法計算

s3 = s1 +s2

set.

print

(s3)

set.mt.__mul =set.intersection

set.

print((s1 + s2)*s1)

Lua元表和元表方法

今天學習lua中的元表,書上講的太難懂了,網上搜尋教程也將的模模糊糊,搜了一會總結了一下經驗,跟大家分享一下,希望對您有所幫助。如何設定元表?local t local mt getmetatable t nil setmetatable t,mt 將t1設定為t的元表 getmetatable t...

lua元表理解

2015 08 23 22 13 237人閱讀收藏 舉報 lua 在lua中任何變數都有乙個元表 我相信每個字串元表都是string相關,所以可以使用string length 元表中特殊的值有特殊的含義,比如 index,call,add等等。函式setmetatable a,meta 就是將me...

lua元表詳解

元表是用來定義對table或userdata操作方式的表 local t1 local t2 local t3 t1 t2 我們直接對兩個table執行 運算,會報錯 lua usercode file.lua 3 attempt to perform arithmetic on local t1 ...