一 、简介
(1)、 Lua 语言 快速 简单 灵活 ,因此常用于游戏开发,尤其是 嵌入性的开发,比如,魔兽世界的界面就是用的lua语言
(2)、 更多时候,我们会用c 或者c++ 做功能性开发,而用Lua 做逻辑性开发
(3)、 安装 http://sourceforge.net/projects/luabinaries/?source=typ_redirect
二、创建项目
(1)、新建一个文档,后缀为.lua
(2)、打开命令窗口(Shift+鼠标右键)
(3)、输入 lua53.exe xxx.lua(文档名)
三、常用语句
(1)、输出 print("Hello world")
(2)、循环
for i=0,10 do
print(i)
end
四、Lua 的值和类型
(1) 数值: 1,2,3.1。。
(2)字符串 :“Hello world”
(3) 布尔 :true ,false
五、变量赋值
(1)、
a=1
print(a)
=====>输出 1
(2)、
a=true
b=false
print(a,b)
=====》输出 true false
六 、Table ==数组+映射
(1) 、数组 :定义 , 从1开始 ,没有类型限定,大小可自动扩充
a={}
a[1]=10
a[2]=20
a[3]="Hello World"
print(a[1],a[2],a[3])
==》简写
b={10,20,"hello"}
print(b[1],b[2],b[3])
(2)、映射:c[key]=value
c={}
c["hello"]=2
c[3]=false
print(c.hello,c[3])
===》简写
d ={d["hello"]=2,d[3]=false}
print(d.hello,d[3])
七、Lua 函数
(1)、函数的几种写法
(1
function add(a,b)
return a+b
end
print(add(1,2))
(2
a=add(1,2)
print(a)
(3 可把函数当作一个值
add=function(a,b)
return a+b
end
foo=add
print(foo(1,2))
====》输出 3
(2)、多返回值(一次可返回多个值)
function add(a,b)
return a+b ,a-b
end
print(add(1,2))
====》输出3, -1
(3)、多变量赋值
a,b=1,2
print(a,b)
===》输出1 2
如果
a,b=1
print(a,b)
==>输出 1,nil(表示为空)
如果
a,b=1,2,3
print(a,b)
==>输出 1 2
(4)、交换变量
a,b=1,2
a,b=b,a
print(a,b)
==》输出 2 1
八、Lua表达式
(1) lua中没有 “+=”的说法
a=1
a=a+1
print(a)
==》输出 2
(2) 可直接用表达式计算
b=3
print((b+2)*3)
==》输出 15
(3) 逻辑表达式
--与 或 非
print(true and false)
print(true or false)
print(not true)
(4)拼接 (Lua 中的“+” 只表示 数值运算 ,不能用于字符的拼接,)
--拼接用 “.."
print("hello".."world")
(5)作用域 --local (表示局部变量)
function foo()
local a=1 //只在 foo() 函数中有效
end
九、流程控制
(1)、if
if 条件 then
满足时执行语句
else
不满足时执行语句
end
(2)、while
local i=0
while i<10 do
print(i)
i=i+1
end
(3) 、for
(1
for i=0,10,1 do
print(i)
end
===》 表示 初始值为0 ,终值 为10 ,每循环一次+1 (默认缺省)
for i=10 ,0,-2 do
print(i)
end
===》表示初始值为10 ,终值为0 ,每循环一次-2
(2 泛型遍历 ------- ipairs、 pairs(迭代器)
(1 pairs(a) 表示遍历Tab(数组和映射) ,顺序不一定
a={["foo"]=1,[100]=true,[1]=20,[2]=30}
for k,v in pairs(a) do
print(k,v)
end
===》输出 100 true
foo 1
2 30
1 20
(2 ipairs(a) 表示遍历Tab(只遍历数组部分)
for k,v in ipairs(a) do
print(k,v)
end
===>输出 1 20
2 30
十、Lua包(package --我把它理解为命名空间,不同文件之间的调用)
(1)、另外新建一个lua文件 比如 one.lua,里面可以写上自己需要的函数。。。
local c={}
function c.send(a,b)
return a+b
end
return c
(2)、在之前新建的test.luaa中 调用 one.lua的函数 send
local socket=require("one")
print(socket.send(1,2))
===>输出 3
(3) require("xx") 自动把()里面的字符作为文件名去搜索,并执行(这里不需要添加文件后缀)
无论程序调用多少次该函数,都只会运行一次 one 文件
十一、Lua 库(我把它理解为各种方法的集合)
(1)、table添加元素 insert
local t={}
for i=1,10 do
table.insert(t,i)
end
(2) 、删除某一个元素 remove
table.remove(t,2)
for k,v in pairs(t) do
print(k,v)
end
(3) 获取元素个数 #xx
print(#t)
(4) 获取类型 type(xx)
print(type(t))
(5)类型转换 tonumber()、 tostring()...
local a=tonumber("3.14")
print(a)
(6) 格式化string .format()
a=string.format("hi %d",5)
print(a)
......
十二、总结
(1) 、Tab 买一送二 tab=数组+映射
(2)、 数组的下标从1开始,连续使用时表示是数组,否则为映射 ,并且会自动扩充
(3)、 万物皆值 函数也是一种值
(4)、函数支持多返回值
(5)、逻辑运算用英文 and or not表示 与 或 非
(6)、字符串连接用。。
(7)、local 优化,控制作用域
(8)、迭代器 ipairs pairs (ipairs 只遍历数组 pairs 遍历数组和映射)
(9)、单行注释 - -
(10)、多行注释 --[[xxxxx]]