Lua
复制代码
--元表的概念
--[[
任何表变量都可以作为另一个表变量的元表
任何表变量都可以有自己的元表
当我们子表中进行特定操作时
会执行元表中的内容
]]
--如何设置元表
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.name
end,
--当子表被当作函数使用时,会调用__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.age
end,
--相当于运算符重载,子表使用-时调用
__sub = function(a,b)
return a.age - b.age
end,
--相当于运算符重载,子表使用*时调用
__mul = function(a,b)
return a.age * b.age
end,
--相当于运算符重载,子表使用/时调用
__div = function(a,b)
return a.age / b.age
end,
--相当于运算符重载,子表使用%时调用
__mod = function(a,b)
return a.age % b.age
end,
--相当于运算符重载,子表使用^时调用
__pow = function(a,b)
return a.age ^ b.age
end,
--如果要用条件运算符 来比较两个对象 这两个对象的元表必须一致才能准确调用方法
--相当于运算符重载,子表使用==时调用
__eq = function(a,b)
return a.age == b.age
end,
--相当于运算符重载,子表使用<时调用
__lt = function(a,b)
return a.age < b.age
end,
--相当于运算符重载,子表使用<=时调用
__le = function(a,b)
return a.age <= b.age
end,
--相当于运算符重载,子表使用..时调用
__concat = function(a,b)
return "ab"
end
}
myTable4 = {
age =13
}
myTable5 = {
age = 16
}
--设置元表函数
--第一个参数 子表 第二个参数 元表
setmetatable(myTable4,meta4)
setmetatable(myTable5,meta4)
print(myTable4 + myTable5)
--元表特定操作_index和_newIndex
meta6Father ={
age = 1
}
meta6Father.__index = meta6Father
meta6 = {}
meta6.__index = meta6
myTable6 = {}
--设置元表函数
--第一个参数 子表 第二个参数 元表
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)
Lua
复制代码
--时间
--系统时间
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) do
print(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:\\"