lua元表与面向对象

2023-11-03

lua元表 扩展普通表的行为

setmetatable(tab,mematable),如果元表中存在__mematable,setmematable会失效,__mematable可以保护元表,禁止访问或修改元表中的成员。

getmetatable(tab),获取tab的元表。

__index:当搜索表的key不存在的时候调用,如果__index为一个函数的时候调用该函数,有两个参数table、key,函数有返回值时返回该值否则返回nil;如果__index为一个表的时候返回该表的key所代表的value

__newindex:当修改表不存在的索引时调用,就是添加新的键值对时调用。如果为函数时,由三个参数table、key、value,如果使用添加功能到表中使用方法rawset(table,key,value);如果为一个表的时候会将新的键值对添加到该表中。

__call:把表当作函数使用。__call = function(table,arg1,arg2) return "" end

__add等操作:执行表的各种运算操作,例如__add = function(tab1,tab2) return tab end

__tostring:输出表。__tostring = function (tab) return str end

 

面向对象编程

当通过:调用的时候,系统会自动传递当前的table给self,当通过.来调用的时候,self不会自动赋值,必须通过第一个参数来传递当前的table。

function class:new(o)

local t = o or {}

setmetatable(t,{__index = self})--调用一个属性的时候,如果t中不存在,会在__index所指定的table中寻找

return t

end

 

function class:new(o)

local t = o or {}

setmetatable(t,self)--调用一个属性的时候,如果t中不存在,会在__index所指定的table中寻找

self.__index = self

return t

end

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

lua元表与面向对象 的相关文章

  • Lua:冒号符号、“自我”和函数定义与调用

    我对定义 调用 Lua 函数时使用的冒号表示法感到非常困惑 我以为我已经明白了 直到我看到这段代码 function string PatternSafe str return str gsub pattern escape replace
  • 什么更快?循环或多个 if 条件

    我想知道什么更快 是只用一条指令 即 1 1 执行 9 次 for 循环还是执行 9 个 if 条件时 我认为 if 更快 因为您不需要检查循环中的指令 它应该几乎相同 因为for循环本质上是检查if条件为真并运行一段代码 非常类似于if声
  • Lua 中的内联条件(a == b ? "yes" : "no")?

    无论如何 Lua 中可以使用内联条件吗 Such as print blah a true blah nahblah Sure print blah a and blah or nahblah
  • 为什么 LuaJIT 和 Lua 中的数字舍入格式不同?

    Using string format 据说遵循 Csprintf 在 LuaJIT 轮次中格式化数字与我尝试过的所有其他 Lua 解释器不同 lua v Lua 5 4 1 Copyright C 1994 2020 Lua org PU
  • Redis INCRBY 有限制

    我想知道是否有一种方法可以通过我的应用程序的单次往返在 Redis 中执行此操作 对于给定的键K 其可能值V是范围内的任意整数 A B 基本上 它有上限和下限 When an INCRBY or DECRBY发出命令 例如INCRBY ke
  • corona sdk中拖动物理对象

    我尝试在场景中拖动重力 0 0 的动态主体 我有一个主体类型为动态的正方形 以及一个主体类型为静态的图像 但是当将方形拖动到图像上时 它会产生一点力 但是可以超出图像并传递到另一边 如图所示 这是我拖动正方形的代码 local functi
  • Lua-迭代嵌套表

    我已经学习 Lua 几个星期了 这一次又一次成为我的症结所在 我尝试阅读有关该主题的帖子和书籍 我使用 Lua 查询软件监控系统 Nimsoft 我的数据以表格形式返回给我 我不会发布整个输出 但这里有一个我认为可以描述结构的片段 表参考是
  • 尝试将 nil 与数字堆栈回溯进行比较?

    我正在通过以下链接玩 Lua https www lua org pil 4 2 html https www lua org pil 4 2 html并对某一点感到困惑 Lua 5 2 4 Copyright C 1994 2015 Lu
  • Lua中如何获取表中的最大整数?

    Lua中如何获取表中的最大整数 在Lua 5 1及更早版本中 你可以使用 math max unpack 1 2 3 4 5 这受到Lua堆栈大小的限制 在 PUC Lua 5 1 上 该值的最大值可达 ca 8000 个数字 如果堆栈空闲
  • lua中的权限问题

    是否需要在 corona build settings 中设置一些特定权限才能将高分永久保存在文件中 每次运行代码时都会出现 权限被拒绝 的错误 如何纠正这个错误 这是我尝试过的代码 function read score local f1
  • 安装Lua套接字库

    要么我太累了 要么我瞎了 我想学习 Lua 网络 因此我必须安装socketlib 所以我可以轻松地要求它 但我不知道我应该 要求 哪些文件 例子说 local socket require socket 但正如我所说 如果我使用 我不知道
  • Lua 将字符串转换为数字 - 取决于语言环境

    刚刚注意到字符串 and tonumber 在 Lua 中是依赖于语言环境的 知道如何在不使用的情况下将字符串转换为数字tonumber 谢谢 例如将字符串 58 5 转换为 58 5 另外 当我尝试将带点的数字传递给函数时 该函数会转换
  • 比较 Lua 中的日期

    我有一个带有日期表的变量 如下所示 table day number 15 year number 2015 month number 2 如何获取当前日期与上述日期之间的天数 非常感谢 您可以使用os time 将表转换为秒并获取当前时间
  • 如何在我的 Lua 脚本中添加“睡眠”或“等待”?

    我正在尝试通过更改一天中的时间来为游戏制作一个简单的脚本 但我想快速完成 这就是我要说的 function disco hour minute setTime 1 0 SLEEP setTime 2 0 SLEEP setTime 3 0
  • 如何通过 C API 在自己的环境中执行不受信任的 Lua 文件

    我想通过调用在其自己的环境中执行不受信任的 lua 文件lua setfenv http pgl yoyo org luai i lua setfenv这样它就不会影响我的任何代码 该函数的文档仅解释了如何调用函数 而不解释如何执行文件 目
  • gsub 的转义字符串

    我读了一个文件 local logfile io open log txt r data logfile read a print data output n w r 1 2 n t x re S 是的 日志文件看起来很糟糕 因为它充满了各
  • 云到设备 Azure IoT REST API

    我探索了如何使用 Azure REST API 将数据从设备发送到云 它运行无缝 没有任何问题 我没有找到有关使用 Azure IoT Hub REST API 向 Arduino 板发送云到设备消息的好文章 有人可以就此提供建议吗 您还可
  • 模式 ^u.meta(\.|$) 未按预期工作

    我有这个模式 u meta 预期行为 u meta 将匹配所有角色 例如 u meta u meta admin u meta admin system u meta 它不应该匹配如下所示的内容 u meta admin u meta ad
  • 如何将 Lua 粘合到 C++ 代码?

    您使用 Luabind toLua 或其他库 如果使用 是哪一个 还是根本不使用 每种方法都有哪些优点和缺点 我不太同意 自己投票 将基本类型和静态 C 函数绑定到 Lua 是微不足道的 是的 但是当你开始处理表和元表时 情况就会发生变化
  • luajit2.0.0 -- 分段错误:11

    我使用一个简单的例子http lua users org wiki SimpleLuaApiExample http lua users org wiki SimpleLuaApiExample进行测试 该示例可以成功静态链接libluaj

随机推荐

  • 剑指offer-11-数值的整数次方

    文章目录 0 问题 1 一般思路 2 最优方法 快速求幂算法 3 完整代码 0 问题 给定一个double类型的浮点数base和int类型的整数exponent 求base的exponent次方 保证base和exponent不同时为0 1
  • 【转】VS2008快捷键使用技巧

    http www cnblogs com aplomb articles 2171819 html 最近在网上搜集了一些VS2008的快捷键使用技巧 希望能给你带来帮助 提高你的开发效率 1 拷贝和删除一行之前 你不必选中该行 我很讨厌看到
  • java反射机制判断对象所有属性是否全部为空

    判断1个对象所有属性是否为空 可以使用反射机制实现 核心参考代码 判断该对象是否 返回ture表示所有属性为null 返回false表示不是所有属性都是null public static boolean isAllFieldNull Ob
  • PyTorch基础:神经网络工具箱torch.nn(nn.Module类)

    nn Module类 nn Module是PyTorch提供的神经网络类 并在类中实现了网络各层的定义及前向计算与反向计算机制 在初始化中定义模型结构与参数 在函数forward 中编写网络前向过程即可 一般把网络中具有可学习参数的层 如全
  • 重载与重写的再理解

    函数重载 必须要在一个类中进行 子类无法重载父类的函数 父类同名函数将被名称覆盖 重载是在编译期间根据参数类型和个数决定函数调用 函数重写 必须是发生在子类和父类之间的 子类与父类必须有相同的函数原型 使用virtual使多态 如果不使用v
  • Shell 脚本中判断字符串是否为空

    判断一个字符串是否为空的方法 方法一 if str 如果str是空字符串则返回真 方法二 if x str x 如果str是空字符串则返回真 方法三 if z str 如果str是空字符串则返回真 注意 前面三种方式判断字符串的时候最好使用
  • 【matlab】指数分布、均匀分布、正态分布

    指数分布 产生参数为0 1的指数分布的命令应为exprnd 1 0 1 题目要求 顾客到来间隔时间服从参数为0 1的指数分布 指数分布的均值为1 0 1 10 产生参数为0 1的指数分布的命令应为exprnd 1 0 1 指两个顾客到达商店
  • 不支持的 HTTP 请求方法 POST

    url书写有问题 微信redirect uri到后台不需要urlEncode
  • 开漏输出与推挽

    1 推挽输出 可以输出高 低电平 连接数字器件 输出 0 时 N MOS 导通 P MOS 高阻 输出0 输出 1 时 N MOS 高阻 P MOS 导通 输出1 不需要外部上拉电路 开漏输出 输出端相当于三极管的集电极 适合于做电流型的驱
  • Node处理文件(遍历文件夹删除指定文件)

    需求 遍历DATA文件夹删除txt文件 const path require path const fs require fs const dir DATA fs readdir dir err files gt files forEach
  • CodeBlock编译 mqtt

    下载源码编译 git clone https github com eclipse paho mqtt c git cd paho matt c make sudo make install 如果编译遇到错误 安装openssl 1 1 1
  • 【机器学习】Excel对数据线性回归分析

    目录 一 实验目的 二 高尔顿数据集 1 父子身高 2 母子身高 三 Anscombe四重奏 四 参考 一 实验目的 1 线性回归练习 父亲高则儿子高 父亲矮则儿子矮 即父亲与儿子身高相关 且为正相关 母高高一窝 父高高一个 即母亲的身高比
  • 【python】 定义一个Person类,它包含数据成员age, name和gender。从Person中派生一个类Employee,在新类中添加一个数据成员,存储个人的number.等等

    定义一个Person类 它包含数据成员age name和gender a 从Person中派生一个类Employee 在新类中添加一个数据成员 存储个人的number 再从Employee中派生一个类Executive 每个派生类都应该定义
  • 商业智能BI专题报告(精选九篇)

    BI Business Intelligence 即商业智能 它是一套完整的解决方案 把企业的运营数据转化为信息或知识 辅助企业做出明智的业务经营决策的工具 将无序 零散 孤立的数据转换成整合的 规律的 有价值的数据资产 将其以直观 形象的
  • linux磁盘性能测试

    linux磁盘性能测试 1 测试磁盘写能力 time dd if dev zero of test db bs 8k count 1000000 oflag direct 因为 dev zero是一个伪设备 不产生IO 所以主要都集中在te
  • 传感器学习——DS18B20

    DS18B20 DS18B20是Dallas公司生产的数字温度传感器 具有体积小 适用电压宽 经济灵活的特点 它内部使用了onboard专利技术 全部传感元件及转换电路集成在一个形如三极管的集成电路内 DS18B20有电源线 地线及数据线3
  • 微信小程序线上加载使用iconfont问题

    1 在微信小程序根目录下创建style文件夹 里面再创建iconfont文件夹 用于放置iconfont图标文件和iconfont样式文件 2 给iconfont wxss写样式 也可以下载iconfont代码 拷贝iconfont css
  • PowerShell入门教程

    PowerShell基础语句 1 进入Powershell环境 开始 运行 powershell 开始 运行 cmd powershell 不同系统内置的powershell系统版本是不一样的 查看版本 psversiontable 2 p
  • 第十一篇 绘图matplotlib.pyplot的使用

    文章目录 摘要 安装方法 入门案例 使用plt绘图 使用ax绘图 plt figure参数 plot参数 案例一 绘制红色实心的点状图 案例二 绘制红色的破折线图 案例三 绘制两条线 颜色总结 设置标题 轴名称 图例 使用plt实现绘图 使
  • lua元表与面向对象

    lua元表 扩展普通表的行为 setmetatable tab mematable 如果元表中存在 mematable setmematable会失效 mematable可以保护元表 禁止访问或修改元表中的成员 getmetatable t