Lua 实现元方法的重构

最近刚刚入门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] 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值