2020年11月27日
lua版本:5.4.0 Win64
LUA语法
注释
--单行注释
--[[
多行注释
]]
变量声明
--全局变量声明
--单变量
Say = "Hello World"
--多变量
S,a,y = "Hi","Hello",15
--局部变量声明
--单变量
local year=2020
local hour,minute,second = 8,55,40
--[[
提示:
Lua默认所有变量均为全局变量
局部变量需要添加 Local 修饰
声明变量时,不需要指定数据类型
不需要在代码末位写分号
]]
赋值语句
--赋值语句
a,b = 10,5
print(a,b)
--result 10 5
a,b = b,a
print(a,b)
--result 5 10
a,b = 10
print(a,b)
--result 10 nil
a = 10,5
print(a)
--result 10
--[[
提示:
变量个数>值个数-->按变量个数补足nil
变量个数<值个数-->多余的值会被忽略
]]
运算符
算数运算符
A,B = 2,5
_Jia = A + B print(_Jia) --result 7
_Jian = A - B print(_Jian) --result -3
_Cheng = A * B print(_Cheng) --result 10
_Chu = A / B print(_Chu) --result 0.4
_Mi = A ^ B print(_Mi) --result 32.0
_Yu = A % B print(_Yu) --result 2
比较运算符
> < >= <= ~= == and or not
print(3>3) --大于号 result false
print(3<3) --小于号 result false
print(3>=3) --大于等于号 result true
print(3<=3) --小于等于号 result true
print(3==3) --等于等于号 result true
print(3~=3) --不等于号 result true
--[[
提示:
Lua里不存在感叹号!
不等于号用的是 波浪 ~ =
]]
--数字测试
print(4 and 5)
--result 5
print(nil and 13)
--result nil
print(false and 13)
--result false
print(4 or 5)
--result 4
print(false or 5)
--result 5
print(not 4)
--result false
连接运算符
..
print("Hello" .. "World")
--result HelloWorld
print("Data".. 2020 .. "-" .. 11 .. "-" .. 27)
--result Data2020-11-27
print(1 .. 2)
--result 12
--[[
提示:
Lua里只有 false和nil 为假 其他值都真
]]
数据类型
--nil 空值
--所有没有使用过的变量都是nil;nil既是值,又是数据类型
a = nil
print(a)
--reult nil
--boolean 布尔类型
b1,b2 = true,false
print(b1,b2)
--result true false
--,可以连接boolean类型,并加入空格
--..不能连接俩个boolean类型
--number 数值类型 相当于C语言的double
c1,c2,c3 = 100,5,5.03
print(c1..c2..c3)
--result 10055.03(连接运算符把结果全部黏在了一起)
--string 字符串类型
d1,d2,d3,d4 = "He","llo","\n","World"
print(d1..d2..d3..d4)
--result Hello(换行)World
--table 关系类型,这个类型的功能比较强大
--function 函数类型,可以由函数类型来声明变量
简单Table示例
--Table普通
FKK = {}
print(type(FKK))
--result table
FKK[0]= 10
print(FKK[0])
--result 10
FKK["a"]={aa="aa",ab="ab"}
print(FKK["a"]["aa"])
--result aa
--Table嵌套
FKK =
{
10,
[100] = 100,
["100"] = 10,
person =
{
name = "FKK",
age = 20
},
30
--在表内["100"] = 10 --等同于[100]=10
}
print(type(FKK["person"]))
--result table
FKK["person"] = 10 --等同于[person]=10
print(type(FKK["person"]))
--result number
简单语法
if语法
--接收俩个数进行大小比较
a,b=io.read(),io.read()
if a>b then
print(a)
elseif a==b then
print(a,b)
elseif a<b then
print(b)
end
for语法 (支持break)
--for语法
i = 1
for i=2,10,3 do
-- body
print("local + "..i)
end
print("All + "..i)
--[[
结果:
local + 2
local + 5
local + 8
All + 1
提示:
for循环内的i为局部变量
]]
array = {"213","213",nil,"123"}
--ipairs遍历 遇到空值 跳出
for i,v in ipairs(array) do
-- body
print(v)
end
--[[
result
213
213
]]
--paris遍历 遇到空值 跳过
for k,v in pairs(array) do
if v == nil then
print(k)
end
-- body
print(k,v)
end
--[[
result
1 213
2 213
4 123
]]
--普通遍历
for i=1,4 do
-- body
print(array[i])
end
--[[
result
213
213
nil
123
]]
while语法
--while语句
i = 1
while i<100 do
-- body
print(i)
--步长
i=i+10
end
repeat语法(类似c#do…while)
i=0
repeat
-- body
print(i)
--步长
i=i+1
until i>10
2020年11月27日
lua版本:5.4.0 Win64
#Function函数
##声明函数
--声明一个 无参 函数
function func_name()
--方法体
print("This is function")
end
--调用这个函数
func_name()
--result This is function
--声明 一个参数 接收 有参 函数
fkk = function (str)
--方法体
print(str .. " Say Hello")
end
--调用这个函数
fkk("FKK")
--result FKK Say Hello
--[[
提示:
LUA不支持重载
]]
--该方法能找出数组中最大的数以及它在数组中的下标
--函数名字 maximun 有一个参数
function maximum (a)
--局部变量 mi 初始值为 1 (代表初始下标)
local mi = 1 -- maximum index
--局部变量 m 初始值为 a[mi] (代表初始下标为1的值)
local m = a[mi] -- maximum value
--for循环 ipairs方法遍历 数组 a (遇空值 跳出)
for i,val in ipairs(a) do
--if判断 当前值是否 大于 当前已知最大值
if val > m then
--判断为真 则对 mi 与 m 进行重新赋值
mi = i
m = val
end
end
--返回结果 m mi
return m, mi
end
--测试 数组[8,10,23,12,5]
print(maximum({8,10,23,12,5}))
--result 23 3
元表
setmetatable(table,metatable) 返回table
设置元表 son 继承 parent 内 __index表格(或函数)的数据
getmetatable(table) 返回metatable 获取元表
__index是table
--空表
son={}
--带__index 表格的表
parent={
--__index是表格
__index = {
name = 1234
}
}
--设置 parent 为 son 的 元表
setmetatable(son,parent)
--测试
print(son.name)
--result 1234
__index是方法
--空表
son={}
--带__index 表格的表
parent={
--__index是方法
__index = function()
print("FKK")
end
}
--设置 parent 为 son 的 元表
setmetatable(son,parent)
--测试
print(son.name)
--[[result
FKK --没找到name对应的值,所以先执行__index方法
nil --然后打印空值
]]