弱类型,不用定义,随时可以变类型,其中一些地方和vb,python,js有点像
分号有没有都行
nil,和null差不多
boolean,除nil和false都为true
string,单引号双引号都行
number,数字都为number不分那么细,相当于float(都是32位),没有int
table,相当于数组和集合
function,函数,方法
type()判断类型
[[]]多行字符串,一块字符
".."字符串连接,没有重载,+就是加
数字..字符串=字符串,数字+字符串(数字字符,不是报错)=数字,自动转换
tonumber()
tostring(),可以对表进行转换(得到地址),直接..会报错,
如果值可能为空时,加上tostring可以防止报错
"#string"计算string长度
没有自增自减
nil只等于自己
table,function,userdata比较引用
^次方
~=不等于
and or not,与或非,可以对非bool进行判断
and,第一个为假直接返回第一个
or,第一个为真直接返回第一个
n1,n2,n3=1,2,3,多个变量同时赋值
n1,n2,n3=1,2,n3为nil
n1,n2,n3=1,2,3,4,4没赋上
变量默认全局,局部变量加local
if,for,函数中都是全局变量
do
...
end 定义语句块
n=nil,删除n,释放资源
单分支
if() then
...
end
双分支
if() then
else
end
多分支
if() then
elseif() then
end
while循环
while() do
end
repeat循环,do while
repeat
...
until(true/false)
for循环
for i=开始,结束,步长 do
...
end
ipairs循环,只能遍历table数组,有顺序的,for后可以只有一个,表示值
pairs可以遍历table集合(键值对),都可以用,顺序不确定,使用pairs时,for后必须有两个 ,只写一个就是序号
for k,v in ipairs() do
print(k,v)
end
lua没有continue,只有break
函数无需定义返回类型,可以返回任意类型与任意数量的数值。
函数的参数,无需定义参数类型
函数无需大括号。
可以定义变量,把函数直接赋值给它,从而获得相同功能。
function funName(paral,para2,..)
[函数体]
end
函数可以声明为局部的,加local,不同文件中不能用
多返回值时如果个数不同,效果同赋值时个数不同
函数的参数可以是函数,传函数名
可以通过赋值给变量间接使用匿名函数
一个汉字2长度
字符串中有单引号就用双引号,有双引号就用单引号
\r回车
\n换行
\\表示路径中的\
string.len()
string.upper()
string.lower()
findIndex=string.find(str,"子串",startFindIndex)
字符串从1开始算下标
string.sub(str,start,num)
string.sub(str,被替换的字符,替换的字符)
string.reverse()反转
string.format("xxx%dxxx%s",num1,num2)和c差不多
table下标可以为负数,可以动态改变
直接输出表名为地址
下标从1开始
键值对表可以使用tab[],tab.键获得值
table.getn(tab)获取表长度
table.getn(tab)和#只适用数组型表,键值对型为0
table.concat(tab,"分隔符",startIndex,endIndex)连接表内容,输出结果为字符串
table.insert(tab,index,"插入的字符")1,2之间插index为2
table.remove(tab.index),默认移除最后的
table.sort(tab)默认升序
lua没有面向对象,使用table模拟
定义表中字段
tableName.name=""
定义表中的方法
tableName.funName()=function()
end
function tableName.funName()
end
表的方法调用表自身的字段加表名,但是如果表销毁了,指向另一个变量再调用就会报错
所以声明this变量存储表,再用this代替表名
function tableName:funName()
self.name
end
可以不用声明变量存储,使用冒号声明,self指定自身,也可以使用table:funName()调用方法