首页 > 其他分享 >lua 写一个类

lua 写一个类

时间:2024-05-24 15:00:36浏览次数:13  
标签:function end 一个 super lua -- type class

lua的创建类, 自定义class

-- lua面向对象扩展
local _class={}

function class(super)
    local class_type={}
    class_type.ctor=false
    class_type.super=super
    class_type.new=function(...)
            local obj={}
            do
                local create
                create = function(c,...)
                    if c.super then
                        create(c.super,...)
                    end
                    if c.ctor then
                        c.ctor(obj,...)
                    end
                end

                create(class_type,...)
            end
            setmetatable(obj,{ __index=_class[class_type] })
            return obj
        end
    local vtbl={}
    _class[class_type]=vtbl

    setmetatable(class_type,{__newindex=
        function(t,k,v)
            vtbl[k]=v
        end
    })

    if super then
        setmetatable(vtbl,{__index=
            function(t,k)
                local ret=_class[super][k]
                vtbl[k]=ret
                return ret
            end
        })
    end

    return class_type
end


-- 定义Entity类型
Entity = class()

function Entity:ctor()
    self.id = 0                -- 编号
    self.name = "enity"            -- 名字
    self.attributes = {}    -- 存放其它
    setmetatable(self.attributes, { __mode = "k" }) --设置弱引用
end

Player = class(Entity)

function Player:ctor()
    self.name = "player"            -- 名字
end

--创建一个player对象
local p = Player:new()
p.attributes["cc"] = 5
print(p.name, p.id, p.attributes["cc"])

 

标签:function,end,一个,super,lua,--,type,class
From: https://www.cnblogs.com/barrysgy/p/18210965

相关文章

  • (开源) 写了一个无代码平台 brick
    前沿无代码开发是一种无需编写代码或通过少量代码就可以快速生成应用程序的开发平台。它可以快速交付应用程序,解决传统软件开发模式带来的周期长、成本高等问题。无代码开发平台,允许用户通过拖拽和放置组件的方式来构建应用界面。brick是一个无代码开发平台,采用React+Typescr......
  • Lua中调用ref和out修饰参数的函数/重载函数
    [12]lua中调用ref和out修饰参数的函数数值publicintRefCompute(inta,refintb,refintc,intd){b+=a;c+=d;returnb+c;}publicintOutCompute(inta,outintb,outintc,intd){b=a+1;c=d+2;returnb+c;}......
  • 聊聊一个差点被放弃的项目以及近期的开源计划
    前言自从StarBlog和SiteDirectory之后,我还没写新的关于开源项目的系列,最近又积累了很多想法,正好写一篇博客来总结一下。关于差点被放弃的项目,就是最近一直在做的单点认证(IdentityServerLite)IdentityServerLite开发这个项目的起因,是团队的内部系统逐渐多了起来实际上之前......
  • 使用RAG和文本转语音功能,我构建了一个 QA 问答机器人
    节前,我们星球组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学.针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。汇总合集:《大模型实战宝典》(2024版)正式发......
  • lua的table, string, class常用扩展
    --lua扩展--table扩展--返回table大小table.size=function(t)localcount=0for_inpairs(t)docount=count+1endreturncountend--返回table的最大valuetable.maxn=function(t)localmaxn=nilfor_,vinpai......
  • 31. 下一个排列
    整数数组的一个排列就是将其所有成员以序列或线性顺序排列。例如,arr=[1,2,3],以下这些都可以视作arr的排列:[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1]。整数数组的下一个排列是指其整数的下一个字典序更大的排列。更正式地,如果数组的所有排列根据其字典顺序从小到大排列在一......
  • PureBasic是一种基于BASIC语言的编程语言,它提供了一个简单易用的开发环境,旨在帮助开发
    PureBasic是一种基于BASIC语言的编程语言,它提供了一个简单易用的开发环境,旨在帮助开发人员快速创建跨平台的应用程序。PureBasic的特点如下:简单易学:PureBasic的语法类似于传统的BASIC语言,非常容易学习和理解,适合初学者入门。跨平台支持:PureBasic可以在多个操作系统上运行,包括W......
  • SqlSugar : date绑定到XX失败,可以试着换一个类型,或者使用ORM自定义类型实现
    System.Exception:中文提示:date绑定到Machine失败,可以试着换一个类型,或者使用ORM自定义类型实现EnglishMessage:MachinedatebinderroratSqlSugarEntity(IDataRecord)atSqlSugar.IDataReaderEntityBuilder`1.Build(IDataRecorddataRecord)atSqlSugar.......
  • 写一个Linux的 shell脚本删除目录 stud001~stud140 目录下的所有文件
    用户:在linux的shell脚本中写个循环,可以遍历目录stud001直到stud140,并将目录stud001到stud140目录中的内容全部删除。讯飞星火:在shell脚本中,我们可以使用for循环和rm命令来实现这个需求。以下是一个简单的示例:1#!/bin/bash2foriin$(seq-f"%03g"1140)3do4......
  • 截取第一个字用php生成一个头像
    在做商城时生成随机一个头像,找了一下发现用首个字符直接生成的类也不错,和用第三方外链的话还是有不同的,第三方虽然图片比较多,但是会有超时问题,所以用首字母生成方式本地搞,代码如下:点击查看代码1、方法调用测试letter_avatar("壹零柒")2、生成图片方法functionletter_avata......