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 中是否存在目录 如果可能的话最好不使用 LuaFileSystem 模块 尝试做类似以下 python 行的事情 os path isdir path 这是一种在 Unix 和 Windows 上都适用的方式 无需任何外部
  • lua_resume 的 from 参数的含义

    From Lua 5 2 参考手册 http www lua org manual 5 2 manual html lua resume int lua resume lua State L lua State from int nargs
  • 如何在 Lua 中实现 OO?

    Lua 没有内置对 OO 的支持 但它允许您自己构建它 您能否分享一些实现面向对象的方法 请为每个答案写一个例子 如果您有更多示例 请发布另一个答案 我喜欢将 OOP 视为容器 对象 内的数据封装以及可以使用该数据完成的操作子集 还有很多内
  • lua中的权限问题

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

    我有像这样的字符串 ABC DEF 我需要将它们分开 字符并将两个部分分别分配给一个变量 在 Ruby 中 我会这样做 a b ABC DEF split 显然Lua没有这么简单的方法 经过一番挖掘后 我找不到一种简短的方法来实现我所追求的
  • Lua 将字符串转换为数字 - 取决于语言环境

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

    如何终止 Lua 脚本 现在我在 exit 方面遇到问题 我不知道为什么 这更像是一个 Minecraft ComputerCraft 问题 因为它使用了包含的 API 这是我的代码 while true do if turtle dete
  • Lua C API:初始化结构体 C 中的变量矩阵

    我正在尝试使用 Lua C API 创建一个用户数据 并在其中关联一个元表 我将在其中收集矩阵 我无法得到的是如何将初始化矩阵的每个分量设置为零 我按照我的描述编译我的 Lua 模块 C 代码here https stackoverflow
  • 关闭 Löve2D 中的抗锯齿功能

    我在用着L ve2D http love2d org用于编写一个小游戏 L ve2D 是 Lua 的开源游戏引擎 我遇到的问题是 当您在非整数位置绘制精灵时 某些抗锯齿过滤器会自动应用于精灵 love graphics draw sprit
  • 如何让我的 add 命令找到第一个变量和第二个变量的值,然后将它们加在一起?

    vars values function open file lex file end function lex file local data io open file r for char in data lines do Print
  • SHA2 512 的改编给出了不正确的结果

    我正在尝试调整 SecureHashAlgorithm 的纯 Lua 实现here http lua users org wiki SecureHashAlgorithm对于 SHA2 512 而不是 SHA2 256 当我尝试使用改编时
  • 如何在 Lua - Lightroom 插件中使用 HMAC

    首先我要提的是我对 Lua 真的很陌生 如果你认为我的问题太愚蠢 请耐心等待 这是我的要求 我需要使用 HMAC sha256 进行 Lightroom 插件开发 因为我使用它是为了安全 我试图使用这个但没有运气https code goo
  • Lua表在内存中是如何处理的?

    lua如何处理表的增长 是否相当于ArrayList在Java中 IE 需要连续的内存空间 并且当它变得大于已经分配的空间时 内部数组被复制到另一个内存空间 有什么聪明的方法来引导吗 我的问题是 表是如何存储在内存中的 我不是问如何在 Lu
  • 在Windows上使用gcc 5.3.0编译Lua 5.2.4模块

    我需要用 gcc 5 3 0 编译 Lua 5 2 4 模块 在 Windows 上 在此之前 我按照以下步骤构建 Lua 5 2 4 gcc c DLUA BUILD AS DLL c ren lua o lua obj ren luac
  • Tarantool 中的冲突解决(如何在发生冲突时修复主-主模式下的复制)

    在多master场景下使用Tarantool如何实现冲突解决 我正在开发一项应该具有高可用性的服务 因此决定使用 nginx 作为 tarantool 两个节点 禁用只读选项 的负载均衡器 带有备份指令 它会重试对其他节点的失败请求 但如果
  • luajit2.0.0 -- 分段错误:11

    我使用一个简单的例子http lua users org wiki SimpleLuaApiExample http lua users org wiki SimpleLuaApiExample进行测试 该示例可以成功静态链接libluaj
  • 如何编写可以与操作系统交互的VLC插件

    我需要找出是否有可能以及如何 我不关心C C Lua Python 制作一个VLC插件 其目的是由VLC播放器在特定时间调用视频流的将执行一些操作 我需要做的操作是打开 UDP 套接字并发送从当前播放的视频附带的文件中读取的一些数据 我需要
  • 使用 luasocket smtp 和 ssl 发送电子邮件

    我一直在尝试使用帖子中描述的代码发送电子邮件 lua使用gmail账户发送邮件 https stackoverflow com questions 11070623 lua send mail with gmail account 代码由米
  • Lua C API:如何获取函数名称?

    假设 Lua 堆栈是为即将到来的函数调用设置的 使用lua pcall 为了使事情具体化 我们假设该函数采用一个字符串参数 并且堆栈不包含该函数下方的任何其他 Lua 对象 也就是说 堆栈将如下所示 Lua stack at 1 a LUA
  • 我需要对 Metatable.__index 进行澄清

    我之前问过为什么 Lua 没有找到我的元表方法 并被告知通过设置 index到我的元表 它会解决问题 所以我假设调用时的方法是按元表中的索引搜索的 但现在我遇到了一个问题 我需要使用索引括号 and 在我的元表上 所以 index被分配从其

随机推荐

  • 剑指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