输入输出 注意:不需要分号
--输入输出
print(1) --相当于WriteLine,自带回车
io.write(2) --不换行的输出
print("请输入一个值") //测试请在控制台执行 lua ***路径
a=io.read()
print(a)
变量
num=100 a,b,c=1,2,3,4 可同时赋值多个变量
变量不赋值,默认为nil
num为全局变量,默认定义的变量都是全局,定义局部变量需要在前面加一个local
在代码块中声明得局部变量,当代码快运行结束的时候,这个变量就会被释放
在Lua中定义变量是没有类型的,根据存储什么数据,来决定是什么类型
变量得命名不能以数字开头
尽量避免下划线加大写字母开头,这种格式Lua自身保留
变量转换
a=10
b="10"
a=tonumber(b)
b=tostring(a)
单行注释
--注释内容 多选 ctrl+/
多行注释
--[[ 这里是注释内容]]--
Lua中基本数据类型
1.nil表示空数据,等同于null
2.boolean布尔类型,存储true和false
3.string字符串类型,字符串可以使用双引号也可以使用单引号表示
4.number小数类型(Lua中没有整数类型)
5.table表类型
myTable={34,,34,2,342,4}
myTable[3]
Lua中的运算符
1.算术运算符 + - * / (Lua中没++ --这样的运算符)
2.关系运算符 <= < > >= ==
3.逻辑运算符 and or not 分别表示 与 或 非
--and返回假值 当都为假返回前者 当都为真返回后者
print(4 and 5)
print(4 and nil)
print(nil or false)
--or返回真值 都为真返回前者 都为假返回后者
print(4 or 5)
print(4 or nil)
print(nil or false)
if语句的三种用法
1.if [condition] then
end
if 5>3 then
print("yes")
end
2.if [condition] then
else
end
if 5<3 then
print("yes")
else
print("no")
end
3. if [condition] then
elseif [condition]
else
end
if 5<3 then
print("yes")
elseif 10>9 then
print("no")
else
print("default")
end
whie语法结构
while [condition] do
[code to execute]
end
Do..While语法结构
repeat
[code to execute]
until [codition]
i=0
repeat
print(i)
i=i+1
until
i>=10
for循环结构(可以用break终止循环 没有continue语法)
for index=[start],[end],[add] do --add为增量
[code to excute]
end
for i=1,10,2 do
print(i)
end
函数 --函数参数可以传递任意个,不受限制,可以同时返回多个值
function [function name](param1,param2)
[function code]
end
例子:求两个数的和
function Plus(num,num2)
return num1+num2
end
//可传递多个值,不受限制
add1=function ( a,b )
return a+b
end
print(add1(1,3,4))
//可同时返回多个值 代替了c#中out参数
func = function ( )
return 1,2,3,4
end
a,b,c,d=func()
print(d)
标准库
数学运算函数
math.abs --绝对值
math.cos --余弦
math.max -- 最大值
math.maxinteger
math.min --最小值
math.random -- 随机数
math.sin -- 正弦
math.sqrt --开方
math.tan --正切
字符串处理相关函数
string.byte
string.char
string.find
string.format
string.lower
string.sub
string.upper
..字符串相加
tostring() 把数字转化成字符串
tonumber() 把一个字符串转化成数字
Table表
在lua中的table类似C#中的字典,其实就是一个key-value键值对的数据结构
1.table的创建
myTable={}
表明后面使用{}赋值,表示一个空的表
2.table的赋值
myTable[3]=34 当键是一个数字的时候的赋值方式
myTable["name"]="wang" 当键是一个字符串的赋值方式
myTable.name="wang" 当键是一个字符串的赋值方式
3.table的访问
myTable[3] 当键是数字的时候,只有这一种访问方式
myTable.name 当键是字符串的时候有两种访问方式
myTable["name"]
4.table的第二种创建方式
myTable={name="wang",age=18,isMan=false}
(表创建之后依然可以添加数据)
数据访问
myTable.name
myTable["name"]
5.table的第三种方式(类似数组的使用)
myTable={34,34,34,3,4,"asdasd"}
当没有键的时候,编译器会默认给每一个值,添加一个数字的键,该键从1开始
--表实际上就是键值对数组,键值可以为任意类型
--表里没写键的变量,默认从1开始
--表里的成员可读可写,可嵌入表(别忘了逗号)
表的遍历
表的遍历分两种
1.如果是只有数字键,并且是连续的可以使用下面的遍历
for index=1,table.getn(myTable) do
[code to execute]
end
2.所有的表都可以通过下面的方式遍历
for index,value in pairs(myNames) do
print(index,value)
end
例
myTable={33,44,55,"hha"}
for index,value in pairs(myTable) do
print(index,value)
end
表的相关函数
1.table.concat 把表中所有数据连成一个字符串
2.table.insert 向指定位置插入一个数据
3.table.move 移动数据
4.table.pack 包装成一个表
5.table.remove 移除指定位置的数据
6.table.sort 排序
7.table.unpack 返回一个数组,指定范围的数组
通过表来实现面向对象
myTable={} 申请对象
local this=myTable myTable声明this关键字代表当前对象
--定义并声明对象的属性
myTable.name="wang"
myTable.age=110
--定义并声明对象中的方法
myTable.function=function()
[code to execute]
end
function myTable.function()
[code to execute]
end
代码实例
xiaoyu = {
age,
--self可以替代this
grow = function(self)
self.age = self.age + 1
end
}
xiaoyu.age = 18
--模拟面向对象,传参的第一种方式
xiaoyu.grow(xiaoyu)
--第二种,冒号,哪个表调用,self被赋值为哪个表
xiaoyu:grow()
print(xiaoyu.age)
表继承
第一种方法:
Person={
age,
height,
eat=function(food)
print("eat"..food)
end
}
xiaoyu={
huazhuang=function()
print("huazhuang")
end
}
-- 表继承
setmetatable(xiaoyu,{__index=Person})
xiaoyu.age=18
print(xiaoyu.age)
xiaoyu.eat("shit")
第二种方法:
Person={
age,
height,
eat=function(food)
print("eat"..food)
end,
new = function(self)
obj = {}
setmetatable(obj,{__index=self})
return obj
end
}
--创建一个对象继承Person
xiaoyu=Person:new()
xiaoyu.eat(" apple")
--创建一个对象继承Person 并添加新方法
LSL=Person:new()
LSL.lu=function()
print("nihao")
end
LSL.lu()