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