当前位置: 首页 > news >正文

Lua语法(2)

元表
--元表的概念
--[[任何表变量都可以作为另一个表变量的元表任何表变量都可以有自己的元表当我们子表中进行特定操作时会执行元表中的内容
]]--如何设置元表
meta = {}
myTable = {}
--设置元表函数
--第一个参数 子表  第二个参数 元表
setmetatable(myTable,meta)--元表的特定操作
--元表特定操作_tostring
meta2 = {--当子表要被当作字符串使用时,会调用元表tostring方法__tostring = function ()return "helloworld"end}
myTable2 = {}
--设置元表函数
--第一个参数 子表  第二个参数 元表
setmetatable(myTable2,meta2)print(myTable2)--元表特定操作_call
meta3 = {--当子表要被当作字符串使用时,会调用元表tostring方法__tostring = function (a)return a.nameend,--当子表被当作函数使用时,会调用__call的内容__call = function (a,b)print(a,b)print("call")end}
myTable3 = {name = "nihao"
}
--设置元表函数
--第一个参数 子表  第二个参数 元表
setmetatable(myTable3,meta3)myTable3(1) -- __call第一个参数默认是调用者本身,第二个参数才是传入的参数--元表特定操作_运算符重载
meta4 = {--相当于运算符重载,子表使用+时调用__add = function(a,b)return a.age + b.ageend,--相当于运算符重载,子表使用-时调用__sub = function(a,b)return a.age - b.ageend,--相当于运算符重载,子表使用*时调用__mul = function(a,b)return a.age * b.ageend,--相当于运算符重载,子表使用/时调用__div = function(a,b)return a.age / b.ageend,--相当于运算符重载,子表使用%时调用__mod = function(a,b)return a.age % b.ageend,--相当于运算符重载,子表使用^时调用__pow = function(a,b)return a.age ^ b.ageend,--如果要用条件运算符 来比较两个对象 这两个对象的元表必须一致才能准确调用方法--相当于运算符重载,子表使用==时调用__eq = function(a,b)return a.age == b.ageend,--相当于运算符重载,子表使用<时调用__lt = function(a,b)return a.age < b.ageend,--相当于运算符重载,子表使用<=时调用__le = function(a,b)return a.age <= b.ageend,--相当于运算符重载,子表使用..时调用__concat = function(a,b)return "ab"end}
myTable4 = {age =13
}
myTable5 = {age = 16
}
--设置元表函数
--第一个参数 子表  第二个参数 元表
setmetatable(myTable4,meta4)
setmetatable(myTable5,meta4)print(myTable4 + myTable5)--元表特定操作_index和_newIndexmeta6Father ={age = 1
}
meta6Father.__index = meta6Fathermeta6 = {}
meta6.__index = meta6myTable6 = {}--设置元表函数
--第一个参数 子表  第二个参数 元表
setmetatable(myTable6,meta6)
setmetatable(meta6,meta6Father)
--__index当子表中找不到某个属性时 会到元表中 __index指定的表去找索引
print(myTable6.age)--__newIndex 当赋值时,如果赋值一个不存在的索引,那么会把这个值赋值到newIndex所指的表中,不会修改自己
meta7 = {}
meta7.__newindex = {}myTable7 = {}
--设置元表函数
--第一个参数 子表  第二个参数 元表
setmetatable(myTable7,meta7)myTable7.age = 1
print(myTable7.age)
print(meta7.__newindex.age)--获取元表
print(getmetatable(myTable7))
--rawget 当我们使用他时 会去找自己身上有没有这个变量
print(rawget(myTable7, "age"))
--rawset 该方法会忽略newindex的设置 只会该自己的变量
rawset(myTable7,"age",2)
面向对象
--封装
--面向对象  类 都是基于表 table实现
Object = {}
Object.id = 1
function Object:Test()print("Test")
end
function Object:new()local obj = {}self.__index = selfsetmetatable(obj,self)return obj
endlocal myObj = Object:new()
print(myObj.id)
myObj.Test()--继承
function Object:subClass(className)_G[className] = {}local obj = _G[className]self.__index = selfobj.base = selfsetmetatable(obj,self)end
Object:subClass("Person")
print(Person.id)--多态
Object:subClass("GameObject")
GameObject.posX = 0
GameObject.posY = 0
GameObject.posZ = 0
function GameObject:Move()self.posX = self.posX + 1self.posY = self.posY + 1self.posZ = self.posZ + 1print(self.posX,self.posY,self.posZ)
endGameObject:subClass("Player")
function Player:Move()self.base.Move(self)
endlocal p1 = Player:new()
p1:Move()
p1:Move()
local p2 = Player:new()
p2:Move()
自带库
--时间--系统时间
print(os.time())
--根据年月日转化时间
print(os.time({year = 2014,month = 8, day = 14}))
--os.date("*t")
local nowTime = os.date("*t")
for k,v in pairs(nowTime) doprint(k,v)
end--数学运算
--绝对值
print(math.ads(-11))
--弧度转角度
print(math.deg(math.pi))
--三角函数 传弧度
print(math.cos(math.pi))--向下向上取整
print(math.floor(2.6))
print(math.ceil(5.2))--最大值最小值
print(math.max(1,2))
print(math.min(4,5))--小数分离 分成整数部分和小数部分
print(math.modf(1.2))--幂运算
print(math.pow(2,5))--随机数
--先设置随机数种子
math.randomseed(os.time())
print(math.random(100))--开方
print(math.sqrt(4))--路径
print(package.path)
package.path = package.path .. ";C:\\"
Lua垃圾回收
--垃圾回收关键字  collectgarbage
--获取当前lua占用内存数 k字节  用返回值*1024可以得到具体内存占用字节数
collectgarbage("count")--进行垃圾回收
collectgarbage("collect")--Lua中有自动定时进行GC的方法

http://www.dtcms.com/a/453106.html

相关文章:

  • npm、npx、pnpm 深度解析:从原理到实战的全方位指南
  • Qt Qml Drag and Drop-鼠标拖动添加组件
  • 神经网络之为什么回归任务的输出是高斯分布的均值
  • 《深入理解 Django 中间件:请求-响应生命周期与执行顺序全解析》
  • HC32项目搭建
  • 台式真空共晶炉口碑企业
  • 网站开发宣传标语网站建设基本情况
  • [效率]学习哔哩哔哩视频的的笔记|对于书签的想法思考
  • 网站一级页面标题怎么做wordpress js库
  • Python 数字类型与类型转换
  • Python int()函数
  • 【Qt】绘图
  • Java 集合框架全解析:从数据结构到源码实战
  • 北京商地网站建设公司photoshop设计一个精美的网站主页
  • 【MYSQL】统计用户旅行距离的SQL解决方案:排序规则与稳定性全解析
  • 基于单片机的罐体压力控制器设计与实现
  • C# datagridview读取XML数据和保存到XML的例子
  • OPENPPP2 静态隧道链路迁移平滑(UDP/IP)
  • 使用Unity引擎开发Rokid主机应用的模型交互操作
  • 数据中台的数据源与数据处理流程
  • Oracle数据库impdp/expdp
  • Java学习之旅第第二季-10:包装类
  • 微信网站与响应式网站有哪些如何建立营销型网站
  • PanguHA,一款Windows双机热备工具
  • PostgreSQL 从入门到精通:Windows 环境下安装与使用指南
  • ChatMemory连续对话保存和持久化
  • 从Excel到AI:机器学习如何重塑数据分析,以及MLquick的破局之道
  • 子网站怎么做做网站的公司那家好。
  • PyTorchTensorFlow
  • 廊坊网站排名优化报价wordpress如何写个插件