Luaノート12 metatableとmetamethod
1491 ワード
--[[ lua ]]
--[[lua 。 : , , table key-vaule 。 , 2 table , , 。
lua 。
, 。 , a b table, a+b , lua table , :
a b ;
__add ;
, , metamethod;
__add metamethod a b 。
table a+b 。
Lua , ,table userdata , 。 , , , 。lua table , 。
lua table 。 , c 。
table , :
__add(a, b) --
__sub(a, b) --
__mul(a, b) --
__div(a, b) --
__mod(a, b) --
__pow(a, b) --
__unm(a) --
__concat(a, b) --
__len(a) --
__eq(a, b) --
__lt(a, b) --
__le(a, b) --
__index(a, b) --
__newindex(a, b, c) -- (PS: , )
__call(a, ...) --
__tostring(a) --
__metatable --
--]]
-- metatable
print(getmetatable(10))
print(getmetatable('aa'))
tbA={}
tbmeta={}
print(getmetatable(tbA))
setmetatable(tbA,tbmeta)
print(getmetatable(tbA))
print(tbmeta)
-- mt, table。
Set={}
local mt={}
function Set.new(tbTemp)
local set={}
setmetatable(set,mt)
for _,v in pairs(tbTemp) do
set[v] = true
end
return set
end
set1=Set.new({1,2})
for _,v in pairs(set1) do
print(set1)
end
for _,v in pairs(Set.new({1,2,3,4})) do
print(v)
end