美文网首页
Lua面向对象编程

Lua面向对象编程

作者: EternalSunLhx | 来源:发表于2016-06-06 15:27 被阅读224次
--[[
1.定义基类
A = class()

function A:init(a, b) -- 构造函数
    self.a = a
    self.b = b
    print("A:init", a, b)
end

function A:Test()
    print("A:Test")
    for k,v in pairs(self) do
        print(k,v)
    end
end

2.继承
B = class(A)

function B:init(a, b, c, d) -- 先调用父类构造
    self.c = c
    self.d = d
    print("B:init", c, d)
end

function B:Test() -- 重载
    print("B:Test1")
end

a = A(100, 200)
b = B(1, 2, 3, 4)

a:Test()
b:Test()
--b:Test1()

--]]

local function class(base)
    assert(base == nil or type(base) == "table")

    local cls = {}
    local mt = {}
    local obj_mt = { 
        __index = cls,
        __newindex = function(self, key, value)
            if cls[key] ~= nil then
                Debug.LogError(debug.traceback("[ERROR] '" .. key .. "' is keyword", 2))
                return
            end

            rawset(self, key, value)
        end,
    }

    function cls.attach(obj)
        return setmetatable(obj, obj_mt)
    end

    -- function cls.new(_, ...)
    --  return cls.attach({}):__init(...)
    -- end

    function cls.new(...)
        return cls.attach({}):__init(...)
    end

    function cls.inherit(base)
        assert(type(base) == "table")

        cls.super = base
        mt.__index = base
    end

    function cls.__init(obj, ...)
        local super = cls.super
        if super then
            super.__init(obj, ...)
        end

        local init = rawget(cls, "init")
        if init then
            init(obj, ...)
        end

        return obj
    end

    function cls.get(self, key)
        if key == nil then
            return nil
        end

        return self[key]
    end

    function cls.set(self, key, value)
        if key == nil then
            return
        end

        self[key] = value
    end

    -- mt.__call = cls.new

    if base then
        cls.inherit(base)
    end

    return setmetatable(cls, mt)
end

return class

相关文章

  • Lua面向对象编程

    在lua原生语法特性中是不具备面向对象设计的特性。因此,要想在lua上像其他高级语言一样使用面向对象的设计方法有以...

  • Lua面向对象编程

  • Lua极简入门(十)——面向对象

    在介绍完Lua的基础知识包括元表,函数式编程之后,终于到了Lua面向对象编程。虽然并不打算使用Lua进行大型应用系...

  • Lua面向对象编程详解

    前言 Lua并非严格意义上的面向对象语言,在语言层面上并没有直接提供诸如class这样的关键字,也没有显式的继承语...

  • 面向对象_初识

    目录 面向对象编程介绍 类与对象介绍 私有属性与私有方法 面向对象编程 1. 面向对象编程介绍 面向对象编程:Ob...

  • 谈谈面向对象编程

    何为面向对象编程 面向对象编程简介 面向对象编程(Object-oriented Programming,缩写:O...

  • 面向对象基础

    面向对象编程包括: 面向对象的分析(OOA) 面向对象的设计(OOD) 面向对象的编程实现(OOP) 面向对象思想...

  • python-day14

    一、面向对象编程 编程思想:1.面向对象编程 --> 算法,逻辑2.函数式编程 --> 函数3.面向对象编程 ...

  • PHP全栈学习笔记8

    面向对象的基本概念,面向对象编程,oop,面向对象,面向对象的分析,面向对象的设计,面向对象的编程,什么是类。 类...

  • PHP全栈学习笔记8

    面向对象的基本概念,面向对象编程,oop,面向对象,面向对象的分析,面向对象的设计,面向对象的编程,什么是类。 类...

网友评论

      本文标题:Lua面向对象编程

      本文链接:https://www.haomeiwen.com/subject/kytddttx.html