lua元表

本文详细探讨了Lua语言中的元表机制,包括元表的概念、创建与设置,以及元表在实现面向对象编程、表行为定制等方面的应用。通过实例解析,帮助读者深入理解元表的使用和重要性。
--[[
元表,设置另一个表作为主表的辅助
setmetatable(a,b) 设置b为a的元表,a中索引找不到就去b中找
setmetatable(a,b) 返回值为a

getmetatable(a) 返回a的元表,即b
]]

local mytable = {"Lua","Java","C#","C++"} 

setmetatable(mytable, {
    -- 主表索引不存在时,在元表里面找
    __index = function(tab,key)
        return key
    end,

    --更新表,如果存在则覆盖,否则新增
    __newindex = function(tab,key,value)
        rawset(tab,key,value)
    end,

    --两个表相加
    __add = function(tab,newtab)
        for k,v in pairs(newtab) do
            table.insert(tab, v)
        end
        return tab
    end,

    --表调用参数时
    __call = function(tab, param)
        print("call " .. param)
        return "call"
    end,

    --print表时使用
    __tostring = function (tab) 
        local str = ""
        for k,v in pairs(tab) do
            str = str .. v .. ","
        end
        return str
    end,
})

print(mytable[1])
mytable["name"] = "qwe"
mytable["name"] = "qwe2"
print(mytable["name"])
mytable[1] = "lua"
print(mytable[1])

print(mytable)

mytable = mytable + {"PHP","Python"}
print(mytable)

print(mytable(10))

--[[

setmetatable(command, { __index = function(t,k)
	local cmd = string.upper(k)
	local f = function (self, v, ...)
		if type(v) == "table" then
			return self[1]:request(compose_message(cmd, v), read_response)
		else
			return self[1]:request(compose_message(cmd, {v, ...}), read_response)
		end
	end
	t[k] = f
	return f
end})

]]


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值