lua 我用来做脚本的语言 简单优雅
有错,请给与指导,谢谢
1.chunk 运行语句块 一般指一个文件 或 交互模式下的一条语句
2.全局变量 给一个新的标识符赋值便创建了一个全局变量
3.保留字:
4.注释 : 单行 -- 多行 --[[ --]]
5.类型: :nil、boolean、number、string、userdata、function、thread和table, type检测类型 print(type(10.4*3)) --> number
6.字符串: ‘sadf’ , "dsfds ",[[asdfsadf]]
7.算术运算符: 二元运算符:+ - * / ^ (加减乘除幂) 一元运算符:- (负值) 这些运算符的操作数都是实数
8.关系运算符 :< ,> ,<= , >= , == ,~= "2" < "15" -- false (alphabetical order!)
9.逻辑运算符:and or not and和or的运算结果不是true和false,而是和它的两个操作数相关 a ? b : c -》 (a and b) or c ,not的结果一直返回false或者true
10.优先级: x^y^z <--> x^(y^z)
11.表 一个神奇的东西 初始化:
list风格:a = {x=0, y=0} 给健值对 访问 a.x
record风格:days = {"Sunday", "Monday", "Tuesday", "Wednesday","Thursday", "Friday", "Saturday"} 给一个值 访问 a.[1]("Sunday")
12赋值语句:x, y = y, x 交换x,y 允许多值赋值 特别是调用c++函数时,其返回值可能修改为多值 如position,赋值遵从多删少补原则
13逻辑语句块 block 比chunk小型 一般指do。。。end 函数范围内等
14局部变量 local 如在一个文件 函数中 快,避免名字冲突
15控制语句
条件:
if conditions then
then-part
else
else-part
end;
循环:
while condition do
statements;
end;
for var=exp1,exp2,exp3 do
loop-part
end
泛型 for:for i,v in ipairs(a) do print(v) end for k in pairs(t) do print(k) end
16break语句用来退出当前循环(for,repeat,while)。在循环外部不可以使用。
return用来从函数返回结果,当一个函数自然结束结尾会有一个默认的return。
两者只能在逻辑结尾,也就是一条逻辑路径的结尾,没有其他代码,如end,else之前 调试do return end -- OK
17 函数
function func_name (arguments-list)
statements-list;
end;
调用函数 ()有时是可选的 可以返回多个值,若不是最后一个参数,则只返回一个
... 多余的参数放在arg里面 arg有个长度成员n ,unpack的实用
18排序
table.sort(network, function (a,b)
return (a.name > b.name)
end)
19闭包 内部函数访问调用他的函数的局部变量,当外部函数返回时,这个局部变量成了内部函数的状态量,upvalue,且这个状态量可以在一开始不同,也可以随这个内部函数的调用次数发生改变,由于函数是第一类值,因此就有了不同的upvalue-函数对 一对为一个闭包
20表函数
Lib = {}
function Lib.foo (x,y)
return x + y
end
个人爱好,比较能接受的写法
局部函数
local fact
fact = function (n)
if n == 0 then
return 1
else
return n*fact(n-1)
end
end
尾调用
在逻辑路径结束点上调用函数,可不保存当前函数,chunk,block的现场,不会有像c++多层调用带来的栈空间耗损巨大的问题
21 loadfile:加载编译文件,返回函数或错误信息,可多次执行此函数或根据错误信息做判断
dofile:加载编译执行文件
loadstring:跟loadfile差不多,加载的对象时字符串,环境是全局
require:dofile的改良版,有表记录是否加载过,且路径匹配有独特的方式
22 assert:执行第一个参数 正常则正常返回 错误则抛出第二个参数
pcall:执行第一个参数,无捕捉到抛出的错误,则返回true和被执行的参数的返回,否则返回false和错误信息
xpcall:多了第二个参数,第二个参数为错误处理回调函数,第一个参数抛出的错误会先给第二个参数执行,然后接收回调函数的返回