Lua之.与:详解(以一个简单的类实现调用解析)

local function classT(className,...)
    local cls = {}
    cls.__className = className
    cls.ctor = function (...)
        --默认构造函数
    end
    cls.new = function (...)--------------------(4)
        local instance = {}
        setmetatable(instance,{__index=cls})
        instance.__class = cls
        instance:ctor(...)-----------------------(5)
        return instance
    end

    cls.create = function (...)------------------(2)
        return cls.new(...)----------------------(3)
    end
    return cls
end
local classAT = classT("classA")
function classAT:ctor(...)-----------------------(6)
    self.name = ...       -----------------------(7)
end
local classA_1T = classAT:create("secondParam")--(1) 

详解如下:
–(1):调用时默认传入第一个参数self即classAT,第二个"secondParam"
–(2):但是函数声明的时候用的 . ,所以不会有默认隐藏的self去接收,此时传入参数为 classAT secondParam
–(3).调用,不会传入self,即参数为classAT secondParam
–(4).但是函数声明的时候用的 . ,所以不会有默认隐藏的self去接收,此时传入参数为 classAT secondParam
–(5):调用,会传入self即instance,所以传入参数instance classAT secondParam
–(6):声明,会有默认self接收instance,即传入参数为classAT secondParam
–(7)self.name = classAT secondParam,多个参数赋值一个变量,只赋值第一个,
即self=instance,self.name=instance.name=classAT
在这里插入图片描述
若将第(5)步变成instance.ctor(…),则
–(5):调用,不会传入self即instance,所以传入参数classAT secondParam
–(6):声明,会有默认self接收classAT,即传入参数为secondParam
–(7)self = classAT, self.name=classAT.name=secondParam
在这里插入图片描述

总结如下:
classAT:create(“secondParam”)这种:号调用,会默认传入self作为第一个参数,传入参数为classAT"secondParam"
cls.create = function (…)这种.号函数声明,没有默认self接收,将使得传入参数变成classAT “secondParam”
instance:ctor(…)这种:号调用,会默认传入self作为第一个参数,传入参数为instance classAT “secondParam”
function classAT:ctor(…)这种有默认self接收,将使得传入参数变为classAT"secondParam"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值