lua 的 冒号和点的用法

lua 的 冒号和点的用法


无论在定义还是调用时,都可以使用: 和 .  。
定义中 如果是: 则省略了 self参数,但实际上参数中是有self的;如果是 . 则可以根据需要写上self。
调用时 使用:则会自动增加self为第一个参数;使用. 则要根据定义中的参数一一匹配,如果定义中是用的:则要增加self。


看一下下面的例子就明白了

a = {x = 3, y = 4}

a.__index = function(table, key)
                print("start metatable")
                 return a[key]
            end

function a:new2(o)
    o = o or {}
    print("new2")
    setmetatable(o, self)
    return o
end

function a.new(self,o)
    o = o or {}
    print("new")
    setmetatable(o, self)
    return o
end

function a.new3(o)
    o = o or {}
    print("new3")
    setmetatable(o, a)
    return o
end

local b = a:new() --调用可以等价于a.new(a, {})
local c = a.new(a)

local d = a.new2(a)
local e = a:new2()

local f = a.new3()
local g = a:new3()   -- 无法执行 ,第一个是self

print(getmetatable(b))
print(getmetatable(c))

print(getmetatable(d))
print(getmetatable(e))

print(getmetatable(f))
print(getmetatable(g))

print(b.x)
print(b.y)

print(c.x)
print(c.y)

print(d.x)
print(d.y)

print(e.x)
print(e.y)

print(f.x)
print(f.y)

print(g.x)
print(g.y)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值