–八大数据类型
– nil boolean number string table function thread userdata
–nil:空类型:没有一种任何的有效值 null
– 对于全局变量和 table,nil 还有一个"删除"作用,给全局变量或者 table 表里的变量赋一个 nil 值,等同于把它们删掉
–bool:true false / nil 和 false 为假,其他为真
–number(数字) float 和 double
–string :字符串
– 是由一对双引号或者单引号定义的
– 也可以用 2 个方括号 “[[]]” 来表示"一块"字符串。
print(“2” + 8) – 10 lua会把数字字符转为数字
print(“2” + “6”)-- 8
–print(“error”+1)–报错 error1 rror 1 字符串拼接用 . .(两个点)
print(“error”. .1) – error1
–字符串长度 #str
len = “www.baidu.com”
print(#len)
–table :lua里面唯一的数据结构 list+哈希 {}
–table默认的索引是从1开始的
–lua的table是不会固定大小,有新数据添加的时候会自动扩容,没有初始化的table都是nil
–任意类型的值来做为数组的索引,但是这个值不能是nil
–function函数
function 函数名(参数列表)函数体 返回值 end
–函数:对语句和表达式进行抽象的主要方法
–用途:
1.完成指定任务
2.计算返回值
–function function_name( … )
body
–end
–把函数做为参数传递给函数
myprint = function (param)
print(“打印函数”,param)
end
function add(num1,num2,functionPrint)
result =num1+num2
functionPrint(result)
end
add(2,5,myprint)
–多返回值,在return后列出要返回的值的列表即可返回多值
–可变参数:可变数目的参数
function add( … )
local sum =0
for i,v in ipairs{…} do
sum=sum+v
end
return sum
end
print(add(3,4,5,6,7))
–将可变参数赋值给一个变量 如tab ={…}
–需要固定参数加上可变参数,固定参数必须在变长参数前
function fwrite( fmt,… )
return io.write(string.format(fmt,…))
end
fwrite(“baidu.com\n”)
fwrite("%d%d\n",1,2)–12
–thread(线程)
–在lua里面,最主要的线程是协同程序,它和线程是差不多的,有自己独立的栈,局部变量,指令指针,可以和其他协同程序共享全局变量和其他部分东西
–线程和协程的区别:线程可以同时运行多个,协程任意时刻只能运行一个,并且处于运行状态的协程只有在被挂起(suspend)的时候才会暂停
–userdata :自定义类型 通常存的是struct和指针
–userdata 是一种用户自定义数据,用于表示一种由应用程序或 C/C++ 语言库所创建的类型,可以将任意 C/C++ 的任意数据类型的数据(通常是 struct 和 指针)存储到 Lua 变量中调用。
–lua变量
–变量在使用前需要进行声明,即为创建该变量
–lua变量的三种类型:全局变量,局部变量(local),表中的域
–Lua 中的变量全是全局变量,那怕是语句块或是函数里,除非用 local 显式声明为局部变量。
–使用局部变量的好处:
1.避免命名冲突
2.访问局部变量的速度比全局变量更快
function test()
c=4
local d =6
end
test()
print(c,d) --4 nil
a =5
local b=3
do
local a =6
b =6
print(a,b)–6 6
end
print(a,b)–5 6