该文用于快速回顾Lua的知识。
基本概念和数据类型
注释:
单行 --
多行--[[ --]]
变量:
默认为全局
无需声明
未初始化变量为nil
删除变量:令变量=nil
数据类型:
用type(变量)查看数据类型
任何数字都是number类型(双精度)
字符串形式:[[字符串]] 或“字符串”
"12"+"34" 将会转换成1234(number)
#字符串 =字符串长度
字符串连接用..
表:
local t1 = {} 创造空表
local tb1 = {1,2,3,4}
local tb1 = {,2,3,4}
(local是局部变量的意思!)
#tb1是表的长度
t1[索引]=值 则插入一个索引和值
索引可以是字符串或number
表的默认初始索引从1开始
t[i]也可用t.i 或 gettable_event(t,i)
运算符:
^ 取幂
- 负号
~= 不等于
and 且
or 或
not 反
.. 字符串连接符
# 返回字符串长度
函数:
function factorial1(n)
--函数内容--
end
function 可以以匿名函数(anonymous function)的方式通过参数传递:
-- function_test2.lua 脚本文件
function anonymous(tab, fun)
for k, v in pairs(tab) do
print(fun(k, v))
end
end
tab = { key1 = "val1", key2 = "val2" }
anonymous(tab,
function(key, val)
return key .. " = " .. val
end)
则function(key,val)就代表那个匿名函数,返回了fun,用作anoymous的参数
即匿名函数一般用来临时使用的。
脚本执行结果为:
$ lua function_test2.lua
key1 = val1
key2 = val2
thread(线程) :
在 Lua 里,最主要的线程是协同程序(coroutine)。它跟线程(thread)差不多,拥有自己独立的栈、局部变量和指令指针,可以跟其他协同程序共享全局变量和其他大部分东西。
线程跟协程的区别:线程可以同时多个运行,而协程任意时刻只能运行一个,并且处于运行状态的协程只有被挂起(suspend)时才会暂停。
userdata(自定义类型) :
userdata 是一种用户自定义数据,用于表示一种由应用程序或 C/C++ 语言库所创建的类型,可以将任意 C/C++ 的任意数据类型的数据(通常是 struct 和 指针)存储到 Lua 变量中调用。
基本语句
赋值语句:
可分开赋值 a,b=1,2
可交换赋值 a,b=b,a
可函数赋值 a,b=f() --f()返回2个值
不可一个值赋给多个变量 例如a,b,c=0,则只有a=0.后面2个值为nil
a. 变量个数 > 值的个数 按变量个数补足nil
b. 变量个数 < 值的个数 多余的值会被忽略
循环语句:
while()
do
内容
end
for var=起始数,终止数,间隔数 do
<执行体>
end
若其中一个数是函数形式,只执行一次函数计算。
间隔数默认为1.
可取到终止数
泛型循环:
for i,v in ipairs(a)
do print(v)
end
ipairs()是迭代器
pairs遍历表中全部key,value
ipairs从下标为1开始遍历,然后下标累加1,如果某个下标元素不存在就终止遍历。这就导致如果下标不连续或者不是从1开始的表就会中断或者遍历不到元素。
num={1,2,3,a="4",nil,5}
则实际上下标1-5为
1 2 3 nil 5
因此ipairs遍历时,检索到第四个就退出,并且不会检索到a="4"
repeat循环:(相当于 do while)
例子:
a=10
repeat
print("a的值为:", a)
a = a + 1
until( a > 15 )
判断语句:
注意,在lua中,认为0是真!
即false和nil为假, true和非nil元素皆为真
if(条件1)
then
print("0 为 true")
elseif(条件2)
then
动作2
elseif(条件3)
then
动作3
else
动作4
end
函数
local(或无) function 函数名(可省略)(参数。。)
函数体
return 返回值可有多个 ,用逗号隔开
end
也可以用
funname =function()
函数体
end
则funname就代表那个函数
函数也可以做参数传递,用来在函数中使用函数
可变参数:
function f(...)
则可以在f中定义
local arg={...},则会收集,是一个表
#arg是表的长度