Lua初识
Lua 数据类型
- 8种基本类型:
- nil :表示无效值(条件表达式代表false)
- boolean:布尔 包含两个值:true和false
- number: 表示双精度类型的实浮点数
- string: 字符串有””或者’’表示
- userdata: 任意存储中的C数据结构
- function: Lua或C编写的函数
- thread: 执行独立线路,执行协同程序
- table: 关联数据(associative arrays),索引是数字或者字符串,table的创建通过”构造表达式”来完成,最简单构造表达式{}(创建一个空表)
nil
1 2 3 4
| nil:空 print(type(x)=="nil") true print(typeI(x)==nil) false 注: type(X)==nil 结果为 false 的原因是因为 type(type(X))==string
|
number
1 2 3 4 5 6 7
| number类型--双精度类型(默认类型修改luaconf.h文中定义) 例如: print(type(2)) print(type(2.2)) print(type(0.2)) print(type(2e+1)) print(type(2.1231231465e-06))
|
string
1 2 3 4 5 6 7 8 9 10 11
| 用 [[]] 表示一块字符串 例如: html = [[ <html> <head></head> <body> <a href="https://herb95.github.io/">Graywolf 博客</a> </body> </html> ]] print(html)
|
运算
1 2 3 4 5 6 7 8 9 10 11 12
| 数字,字符串上进行运算 print("3"+9) print("3"+"9") print("3+9") print("-2e2"*9) print("e"+2) 结果: 12 12 3+9 -1800 error...
|
注:字符串连接使用是 ..
注:用#来计算字符串的长度
# 运用
1 2 3 4 5 6
| len="herb95.github.io/" print(#len) print(#"herb95.github.io/") 结果: 17 17
|
table
1 2 3 4 5 6 7 8 9 10 11
| tab1 ={} -- 直接初始化 tab2 ={"1","2","3","4"} for k,v in pairs(tab2) do print(k.. ":" .. v) end 结果: 1:1 2:2 3:3 4:4
|
注:lua表默认初始索引一般以1开始
table不会固定长度大小,有新数据添加table长度会自动增长,没初始的table都是nil
function
1 2 3 4 5 6 7 8 9 10 11
| -- function 函数是被看做事"第一类值(First-Class Value),可存变量": 例如: function add(a,b) return a+b end print(add(10,20)) add2 = add print(add(10,30)) 结果: 30 40
|
function 可以做匿名函数(anonymous function)的方式参数传递:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| function testFun(tab,fun) for k,v in pairs(tab) do print(fun(k,v)) end end
tab1 = {k1= "1",k2 = "3"}; testFun(tab1, function(k,v) return k.."="..v end ) 结果: k1=1 k2=3
|
thread线程
lua中最主要的线程是协同程序(coroutine),跟线程(thread)差不多,拥有自己独立的栈、 局部变量和指令指针,可与其他协同程序共享全局变量
线程和协程的区别:
- 线程可以多个运行;
- 协程任意时刻只能运行一个,并且处于运行状态的协程只有被挂起(suspend)时才会暂停
userdata (自定义类型)
是一种用户自定义数据,表示一种有应用程序或C/C++语言库创建类型,将任意C/C++任意数据类型的数据(通常是struct和指针) 存到lua变量中调用