Lua 轻量型的脚本语言,不要编译
Lua语句不需要分号结尾,每一行都是一条语句,写分号也没有问题
注释:
单行: —- 双横杆代表单行注释
多行: —[[. . ]]以—-[[开头,直到找到]]结尾
变量的定义:
Lua的变量定义不需要写变量类型,直接变量名 = 值,lua会根据你赋值的值来判断类型
可以使用type(a)的形式来获得a的类型
变量名:跟c#类似,但是尽量避免使用下划线+大写字母的形式,因为这种格式lua自身保留。
lua语言严格区分大小写,例如A和a不是同一个变量。
数据类型:
1.nil 表示空数据,相当于c#的null
2.number 小数类型, 相当于c#的int和float
3.string 字符串类型, 单引号包括的内容,双引号包括的内容,[[…]]...里包括的内容
4.boolean 布尔类型. true和false, lua把false和nil都看作假
5.table 表类型.
关于string类型的操作
对于一个数字字符串进行算术操作时,lua会尝试将这个数字字符串转换成一个数字来进行计算 例如。print(”3” + 3)结果:6
字符串的连接:.. 例如print(“a” .. “b”) 结果ab
字符串的长度:# 使用#来计算字符串的长度,放在字符串的前面 例如. #a
关于table:能表示数组,还能表示字典
Table的创建。table没有固定的大小,可以自己进行扩容
tab = {}
table表示数组:
tab = {"asdf","ddd”}
tab3 = {2,1,3}
使用[]进行访问,注意:lua里的索引都是从1开始的
如果对table进行扩容,可以使用tab3[4] = 10的形式
求table的长度 #
实际table就是键值对
对于给定一组数据,如果指定键的那么系统就是使用你指定的键,如果未指定键,系统会默认添加数字作为它的键,并且从1开始。
tab4 = {2, name = "小明", age = 250, length = 0.1, 10, 23}
例如:tab[1]的结果就是2 tab[2]的结果是10
对于键是字符串的形式的时:
访问有两种方式:tab4["name"] 或 tab4.name
赋值同上
对于tab4 = nil,这种方式可以时tab4让拉架回收释放内存
关于table的相关操作:
连接每个元素 table.concat(tab, ", ", 1, 2)
第一个参数table名,第二个参数每个元素的间隔符号,第三个参数是起始索引,第四个参数是结束索引
插入一个元素 table.insert(tab, 2,"f");
第一个参数table名,第二个参数是插入位置,可选,不写证明是最后,第三个参数是插入内容
删除一个元素 table.remove(tab, 5);
第一个参数table名,第二个参数是删除的索引,不写删除最后一个
排序: table.sort()
参数是table名,升序排序,只对默认数字索引的元素进行排序
排序的局限, 不能同时存在不同的类型,不能出现nil值
局部变量和全局变量
默认定义的变量都是全局变量
Local修饰的变量都是局部变量
运算符
数学运算符:+ - * / % lua没有++ —- += -=类似的运算符
关系运算符:> < >= <= == ~=
逻辑运算符:and or not代表与,或,非
流程控制语句
if 条件 then 语句块 end
if 条件 then true语句块 else false语句块 end
if 条件1 then 1true语句块 elseif 条件2 then 2true的语句块 end
注意:elseif是连在一起的
循环结构
while 条件 do 循环执行的语句块 end 注意:不符合条件时跳出循环’
repeat 循环执行的语句块 until 条件 注意:直到符合条件才跳出循环,跟c#dowhile循环不一样
for i=1,10,2 do 循环语句块 end
10:执行i的最大值, 2每次i增加的值,如果不写默认每次增加1
对table进行遍历
for key,v in ipairs(tab) do
print(key,v)
end
for i=1,#tab do
print(tab[i])
end
这只能对默认的索引的值进行遍历
for k,v in pairs(tab) do
print(k,v)
end
对所有的键值进行遍历
Lua能使用break进行循环跳出,没有continue语法
函数
定义:
function function_name()
-- body
end
或者
function_name = function ()
-- body
end
调用:函数名(),注意调用一定在方法定义之后
参数:支持可变参数(…),a = {…}获取可变传进来的参数
返回值:可以有可以没有,可以返回多返回值。例如
strings1,strings2,strings3,strings4 = GetStrings()
Lua的模块开发(面向对象)
require
提供了一个名为require来加载另一个lua文件
require “文件名” 或者 require (“文件名”)
Lua的模块开发由变量,函数组成的table,因此创建一个模块就是创建一个table,table内有变量和函数,最后返回这个table
Lua的元表
setmetatable(tab1, tab2):设置元表,对于指定的tab1设置元表tab2
getmetatable(tab1):返回tab1的元表
算术类元方法:__add(加), __sub(减), __mul(乘), __div(除)
访问类的元方法:__index(查询), __newindex(修改table字段时)
关系类元方法: __eq(等于),__lt(小于)
其他类元方法: __tostring(print时)