最近要重启tolua项目,基础先过一遍
一、基本语法
1.弱类型 local区分全局和局部
2.销毁变量用 a = nil
3.注释 --
4.lua数组和table索引都是由1开始
二、数据类型
1.基本类型
nil 这个最简单,只有值nil属于该类,表示一个无效值(在条件表达式中相当于false)。
boolean 包含两个值:false和true。
number 表示双精度类型的实浮点数
string 字符串由一对双引号或单引号来表示
function 由 C 或 Lua 编写的函数
userdata 表示任意存储在变量中的C数据结构
thread 表示执行的独立线路,用于执行协同程序
table Lua 中的表(table)其实是一个"关联数组"(associative arrays),数组的索引可以是数字或者是字符串。在 Lua 里,table 的创建是通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表。
2.访问类型
print(type(true)) --> boolean type()可以访问数据类型,返回数据类型string名
3.遍历表
tab1 = { key1 = "val1", key2 = "val2", "val3" }
a.
for k, v in pairs(tab1) do
print(k .. " - " .. v)
end
pairs可以遍历表中所有的key,并且除了迭代器本身以及遍历表本身还可以返回nil;
ipairs则不能返回nil,只能返回数字0,如果遇到nil则退出。它只能遍历到表中出现的第一个不是整数的key
pairs遍历时先遍历没有指定key的元素,后遍历指定key的元素,遍历时按定义的先后顺序
b.
访问table方式:table["key1"]、table.key1、table[1]
前两种用来访问指定key的元素,后一种访问未指定key的元素
3.nil和false被认为假,其他全部是真,0也是真
4.lua只有一种number数字类型,是双精度double
5.“2” + 6 lua会数字相加,与c#相反
6.#计算字符串长度 a = "111";#a = 3
三、变量
1.x,y = y,x 交叉赋值
2.任何地方(包括function内部)没有用local标记的都是全局变量,function内部的赋值需要function执行之后才有效,执行之前是nil
四、循环语句
1.for i=0,10,1 do end 循环包含10
2.for k,v in pairs(a) do end 遍历table
3.while true do end
五、函数
1.local标记局部函数还是全局函数
2.函数可以赋值,因此也可以作为参数传递
3.lua支持变长参数add(...),select("#",...)可访问参数数量,select("#",...)可访问第n个参数
六、运算符
1.与或非:and or not
七、字符串
1.string.gsub("aaaa","a","z",3); 字符替换
2.string.format("the value is:%d",4) 字符格式化
3.string.len(arg) 计算长度 与#a类似
4.没有c#的replace解码方式,需要手动实现
八、表
1.table.sort(tab,comp)排序表,顺序由comp决定
2.table.remove移除元素
3.table.insert添加元素
这三个函数用在数据层很方便
九、协程
local WWW = UnityEngine.WWW
function testFunc()
local www = WWW('http://bbs.ulua.org/readme.txt');
coroutine.www(www);
print(www.text);
end
coroutine.start(testFunc)
十、原表和面向对象
依赖table可模块化的特性,可以模拟出面向对象的特性,即封装成员变量和成员函数,原表的属性复制能力可以模拟面向对象的继承