一.基础语法
1.HelloWorld
print(“Hello World”) 或者 print(‘Hello World’)
单引号双引号都可以 不需要分号结尾
2.定义变量
age = 100
name = “WangXD”
isMan = true
以上变量都为全局变量
定义变量没有类型 存储什么类型变量就是什么类型
变量的命名不能以数字开头,尽量避免下划线和大写字母开头(Lua自身保留),尽量变量小写、方法大写。
3.注释
--这是单行注释
--[[ 这是多行注释 ]]—
4.变量类型
nil 表示空数据 等同于null
boolean类型,true 或者 false(在Lua语言中nil和false为false,其余都为true)
string 字符串类型,可以用单引号或者双引号表示
number 小数类型 (Lua中没有整数类型)
table 表类型 myTable = {1,2,3} 相当于长度为3的数组
下标从1开始 print(myTable[1],myTle[3]) --输出 1 3
5.type() 获取变量类型
--代码
age = 100
name = "WangXD"
isMan = true
myTable = {3,2,1}
print(type(age),type(name),type(isMan),type(myTable)) -- 输出 numberstringbooleantable
6.局部变量和全局变量
直接声明的变量就是全局变量,在任何地方都是可以访问到的、
定义局部变量需要在前面加一个local 、在代码块中声明的局部变量,当代码块运行结束的时候会被释放。
local hp = 70
7.运算符
1.算数运算符 + - * / %(Lua中没有++ --这样的运算符)
--代码1
num1 = 34
num2 = 2
result1 = num1+num2
result2 = num1-num2
result3 = num1*num2
result4 = num1/num2
result5 = num1%num2
print(result1,result2,result3,result4,result5) -- 输出结果 363268170
--代码2
num1 = 34.1
num2 = 2
result1 = num1+num2
result2 = num1-num2
result3 = num1*num2
result4 = num1/num2
result5 = num1%num2
print(result1,result2,result3,result4,result5) -- 输出结果 36.132.168.217.050.1
2.关系运算符 <= 、<、>、>=、==
--代码
num1 = 5
num2 = 6
result1 = num1<num2
result2 = num1>num2
print(result1,result2) --输出结果 true false
3.逻辑运算符and or not分别表示与或非
强调一点 在Lua中认为 nil 和 false 为false 其他都为 true
--代码
isMan1 = true
isMan2 = false
result1 = isMan1 and isMan2
result2 = isMan1 or isMan2
result3 = not result2
print(result1,result2,result3) --输出结果 false true false
--代码
isMan1 = 2
isMan2 = 1
result1 = isMan1 and isMan2
result2 = isMan1 or isMan2
result3 = not result2
print(result1,result2,result3) -- 输出结果 1 2 false
问题: number类型进行逻辑运算符
解答:
a and b 输出的过程是
1.先判断a ,如果a是false 直接输出a的值false,a and b就是false.
2.如果a是true,判断b 如果b是false就输出b的值false ,a and b就是false.
3.a 和b都是true则输出最后一个判断的值true,a and b的值就是true。
逻辑运算符认为false和nil是假(false),其他为真,0也是true.
and的优先级比or高
其它语言中的and表示两者都为真的时候,才返回为真,而只要有一个假,都返回假.lua虽不仅返回假的语义,还返回导致假的值.也就是说
a and b
在a为false的时候,返回a,否则返回b.
or的处理与之类似,
a or b
在a为true的时候,返回a,否则返回b.
总之,and与or返回的不仅有true/false的语义,还返回了它的值
8.流程控制语句
1.if语句三种用法
--代码1
local hp = 70
if hp == 70 then
print("WangXD")
end
--代码2
local hp = 90
if hp == 100 then
print("WangXD")
elseif hp ==90 then
print("Wang")
end
--代码3
local hp = 70
if hp<=0 then
print("role is die")
elseif hp<=50 then
print("role is bad")
else
print("role is good")
end
9.循环结构while、repeat、for
1.while循环
--代码
index = 0
while index<=100 do
print(index)
index = index+1
end
2.repeat循环
--代码
index = 0
repeat
print(index)
index = index+1
until index>100
3.for循环
--代码
for index = 1,100,2 do
print(index)
end
10.函数(方法)
--代码
function GetPlus(num1,num2)
return num1+num2
end
res = GetPlus(11,22)
print(res)
11.标准库(标准函数)
1.数学处理math相关函数
print(math.abs(-90)) --取绝对值
print(math.max(12,23,58,96,5)) --最大值
print(math.min(12,23,58,96,5)) --最小值
print(math.random(2,5)) --随机数(第一次随机产生的不靠谱)
print(math.random(2,5)) --随机数
2.字符串处理的string相关函数
print(string.lower('WXD')) --转换为小写
print(string.upper('wxd')) --转换为大写
print(string.sub("WangXD",1,3)) --截取第一个到第二个
print("Wang".."XD") --两个点连接字符串
print(string.find("WangXDan","an")) --查找指定字符串
print(string.find("WangXDan","an",4)) --查找指定字符串
3.表处理的table相关函数
myTable = {}
myTable[1] = 11
myTable[3] = "WangXD"
myTable["name"] = "WangXD"
myTable.name = "Wang"
print(myTable[1],myTable[3],myTable.name,myTable["name"])
4.文件操作的io相关函数
待总结
12.通过表实现面向对象编程
Enemy = {}
local this = Enemy
Enemy.hp = 100
Enemy.speed = 12.3
Enemy.move = function()
print("敌人在移动")
end
function Enemy.Attack()
print(this.hp,"attack")
print(this.hp,this.speed,"attack")
this.move()
end
Enemy.Attack()
--输出结果
100 attack
100 12.3 attack
敌人在移动