最近刚刚入门LUA,在学习table的时候有一些感觉很有用的思考,特此记录分享
首先看几个概念
LUA table&metatable
表可以说是LUA的核心,其他语言的一些高级数据结构可以用table来实现
最基本的数组就是用table的方式实现的
同样,矩阵、链表、集合、队列、包,以及面向对象编程等都可以使用table+方法的方式实现,具体实现过程在这里不作展开,深入学习Table建议参考官方文档或者参考书:Programming in Lua
中文也推荐菜鸟教程(教程中某些地方和官方文档有一定出入,所以在这里不作优先推荐)
下面进入正题
我在学习LUA元方法的时候思考过这样一个问题,既然方法可以重载,那元方法应该也可以吧?
但是常用的元方法类型都不用函数名,而一般函数的重写还需要继承
我觉得引入函数名这个操作会带来bug隐患,所以作了如下尝试,成功!
见代码:
--下面是__call元方法
-- table_maxn这个方法在我使用的lua版本里面已经不能使用了,所以需要自己定义
function table_maxn(t)
local count = 0
for k,v in pairs(t) do
count = count+1
end
return count
end
m_table = setmetatable({
1,2,3},{
__call = function(...) --*实现重载的第一步*,在这里使用可变参数
-- switch方法的定义
-- 通过传入参数数量来确定执行的函数
local switch = {
[1] = function(para) -- 一个参数
print "There is one parameter."
print (type(para[1]))
end,
[2] = function(para) -- 两个参数
print "There are 2 paremeters."
--local str = type(para[2])
--print (str)
end,
[3]