在游戏行业很常用的语言,小巧轻便
关于Lua:
--Lua是一种解释型语言、轻量快速、和C/C++兼容很好 --Lua的解释器体积很小,依赖也很少,没有环境等问题 --Lua很方便嵌入其他程序或作为脚本使用 --Lua的代码语句后面不加分号 --Lua代码文件的后缀是.lua --这是注释 --[[ 这是 多行注释 --]] --Lua没有面向对象的特性 --Lua支持面向过程编程和函数式编程 --Lua没有程序入口函数的概念,就是从头开始执行的脚本 --Lua是弱类型的语言,一个变量没有固定类型的说法 --Lua的数据类型包括 --无效变量nil --逻辑类型boolean,包含true和false --双精度浮点数number,Lua中只有这一种数字 --所以C语言中浮点数不准确、不能判等的问题应该就不存在了 --浮点数是准确的(?这里先存疑) someNumber=10 someNumber=3.14 --字符串string,字符串由单引号或双引号包括起来 shortString='Hello' shortString="Hello" --长字符块应该使用双方括号包括起来 longText= [[ Hello World Again ]] --字符串和数字进行运算的时候会自动尝试转换为数字 print("1"+1) --使用#得到字符串的长度 print(#shortString) --字符串连接应该使用两个点,其他类型连接时会尝试进行转换 print('A'..'B'..1+1) --函数function,可以是Lua或C的函数 --Lua支持函数式编程,函数是第一公民,可以作为变量传递 --数据结构userdata,任意存储在变量中的C数据结构 --线程thread,一个执行的独立路线 --表table,使用{}构建一个空表 someTable={} someTable[1]='1' someTable['2']=2 --创建时初始化,大括号中是Value,Key是从1开始的数字 --这样就是C语言中的数组了 --以下初始化相当于 --someTable[1]="Value_1" --someTable[2]="Value_2" --someTable[3]="Value_3" someTable={"Value_1","Value_2","Value_3"} --对于字符串类型的Key,符合命名规范就可以使用点进行索引 someTable['someKey']=42 print(someTable.someKey) --默认情况下,变量都是全局的,即使是在代码块中 --创建局部变量应该显式使用local标识符 --局部变量的生命周期到代码块结束为止 while flase do local localData=3.14 end --访问一个变量之前不需要声明,甚至不需要给它赋值 --如果是访问的变量是空变量则返回nil,注意是以字符串的形式 --删除变量的做法就是将其赋值为nil,和C++中的共享指针类似 --nil在Lua中就是表示无效变量,一个变量存在当且仅当其不等于nil --打印一个内容:print print(someData) --获取某个变量目前的类型:type type(someData) --变量赋值可以使用多个变量同时赋值 --当左边变量更少时,右边后面多余的值就会被忽略 --当右边变量更少时,右边后面不足的位置使用nil填充 --右边的变量在赋值开始之前会计算好结果,所以没有先后顺序的影响 x,y,z=1,2 --但是注意,以下的这种写法是不对的 local x,y=1,2 print(x..' '..y) --定义函数 --函数无需显式写明返回值信息,可以返回多个返回值 function someFunction(x,y) return x+y,x-y end --这里写的是否正确?匿名函数是指这个吗?检查一下 --定义匿名函数 someFunction=function(x,y) --定义一个局部的函数,和变量类似,生命周期有限 local function localFunction() end anotherFunction=localFunction print('anotherFunction',type(anotherFunction)) return x-y end someFunction(1,0) --本地函数的生命周期已经结束,无法在外部访问 print('localFunction',type(localFunction)) --Lua的循环支持break,但是不支持continue --仔细想一想,continue确实不是必需的 --可以使用goto语句进行流程控制 goto SkipPrint print('Will Skip Print') ::SkipPrint:: --while循环 Index=1 while(Index<=10) do Index=Index+1 end --区间for循环 --3个参数的意思分别是起始值、终止值、步进值 --步进值是可选的,默认为1 --循环范围是闭区间 for Index=1,3,1 do end --泛型for循环 --ipairs是一个内置函数,用来生成一个迭代器 someTable={"First","Second","Third"} for i,j in ipairs(someTable) do print(i..'='..j) end --repeat循环 --until后面描述终止条件 Index=1 repeat Index=Index+1 until(Index>=3) --逻辑分支 if(x=="nil") then print('x NO') elseif(x==1) then print('x ONE') else print('x YES') end --运算符 --数值运算:加减乘除(+)(-)(*)(/),取余(%),乘幂(^) --关系运算:等于(==),不等(~=),大小判断(>)(>=)(<)(<=) --逻辑运算:与或非(and)、(or)、(not)
function check(x) if x then print('Yes') else print('No') end end -- 逻辑为假的情况 check(false) -- 这当然是No -- 下面3个本质上参数都是nil check(nothing) check(nil) check() -- 逻辑为真的情况 check(true) -- 这当然是Yes check(1) check(0) -- 注意:这个是Yes check({}) -- 这个也是Yes check(#{}) -- 和0同理