lua 的 冒号和点的用法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/DONGHUIB/article/details/78550183

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)

猜你喜欢

转载自blog.csdn.net/DONGHUIB/article/details/78550183