标签:lua
nil 这个最简单,只有值nil属于该类,表示一个无效值(在条件表达式中相当于false)。
boolean 包含两个值:false和true。
number 表示双精度类型的实浮点数
function 由 C 或 Lua 编写的函数
string 字符串由一对双引号或单引号来表示
thread 表示执行的独立线路,用于执行协同程序
table Lua 中的表(table)其实是一个"关联数组"(associative arrays),数组的索引可以是数字或者是字符串。
userdata 表示任意存储在变量中的C数据结构
nil类型
对于全局变量和 table,nil 还有一个"删除"作用,给全局变量或者 table 表里的变量赋一个 nil 值,等同于把它们删掉,
tab1 = { key1 = "val1", key2 = "val2", "val3" }for k, v in pairs(tab1) do
print(k .. " - " .. v)end
tab1.key1 = nilfor k, v in pairs(tab1) do
print(k .. " - " .. v)end
boolean类型
boolean 类型只有两个可选值:true(真) 和 false(假),Lua 把 false 和 nil 看作是"假",其他的都为"真":
number类型
Lua 默认只有一种 number 类型 -- double(双精度)类型
string类型
也可以用 2 个方括号 "[[]]" 来表示"一块"字符串。
html = [[
<html>
<head></head>
<body>
<a href="http://www.w3cschool.cc/">w3cschool菜鸟教程</a>
</body>
</html>
]]
print(html)
打印结果为
<html>
<head></head>
<body>
<a href="http://www.w3cschool.cc/">w3cschool菜鸟教程</a>
</body>
</html>
在对一个数字字符串上进行算术操作时,Lua 会尝试将这个数字字符串转成一个数字:
使用 # 来计算字符串的长度,放在字符串前面,如下实例:
table(表)
对table的索引可以使用[].有些情况下也可以使用.操作
t[i]
t.i 仅当索引是字符串类型时可以使用
table一般完整写法
local a = {["x"] = 12, ["mutou"] = 99, [3] = "hello"}
print(a["x"]);
对于字符串下标,我们可以省略方框和双引号,但是数字下标不可以
local a = {x = 12, mutou = 99, [3] = "hello"}
print(a.x);
大家习惯了数组,用数字下标
local a = {[1] = 12, [2] = 43, [3] = 45, [4] = 90}
gettable_event(t,i) 采用索引本质上是方法的调用
userdata(自字义内容)
userdata 是一种用户自定义数据,用于表示一种由应用程序或 C/C++ 语言库所创建的类型,可以将任意 C/C++ 的任意数据类型的数据(通常是 struct 和 指针)存储到 Lua 变量中调用。
lua中的变量有3种,全局变量,局部变量和表中的域
函数外的变量默认为全局变量,除非用local声明,函数内变量和函数参数默认为局部变量
-- test.lua 文件脚本a = 5 -- 全局变量local b = 5 -- 局部变量function joke() c = 5 -- 局部变量 local d = 6 -- 局部变量endprint(c,d) --> nil nildo local a = 6 -- 局部变量 b = 6 -- 全局变量 print(a,b); --> 6 6endprint(a,b) --> 5 6
lua中可以通过以下方式交换俩个变量的值(lua可以对多个变量赋值,变量列表和值例表用,隔开)
x,y = y,x
当变量个数和值不一致时,lua采取以变量个数为准的策略
a. 变量个数 > 值的个数 按变量个数补足nil b. 变量个数 < 值的个数 多余的值会被忽略
while循环 在条件为 true 时,让程序重复地执行某些语句。执行语句前会先检查条件是否为 true。
for循环 重复执行指定语句,重复次数可在 for 语句中控制。
lua repeat...util循环 重复执行循环,直到 指定的条件为真时为止
lua提供了很多字符串操作
string.upper(argument) 字符串全部转为大写字母
string.lower(argument); 字符串全部转换成小写字母
string.gsub(mainstring,findstring,replacestring,num) mainstrig中的findstring都转换成replacestring,num表示转换几次
string.strfind(str,substr,[init,[end]]) 在一个指定的字符串中搜索指定的内容,返回开始位置和终止位置,第三个参数为可选参数表示init起始位置 ,end不知道
string.reverse(arg) 反转字符串
string.fomat() 返回一个类似print的字符串,
str = string.format("the value is %d",3)
print(str)
string.char(arg) string.byte(arg,[init]) 根据ascii码转换 char转换数字为字符 byte转换字符为数字 init表示从哪个位置开始
string.len(arg) 计算字符串的长度,也可以通过#运算符来取得
string.rep(arg,n) 返回字符串的n个拷贝
初始化
array = {} for i = 1,3 do array[i] = {} for j = 1,3 do array[i][j] = 8 end end
table.concat(table[sep,[,start,[,end]]]) table.concat参数中指定table的数组部分从start位置到end位置的所有元素,元素间以指定的分割符sep隔开
fruits = {"banana","orange","apple"}-- 返回 table 连接后的字符串print("连接后的字符串 ",table.concat(fruits))-- 指定连接字符print("连接后的字符串 ",table.concat(fruits,", "))-- 指定索引来连接 tableprint("连接后的字符串 ",table.concat(fruits,", ", 2,3))
table.insert(table,[pos],value) 插入元素,无pos参数插入最后
table.remove(table,[pos]) 删除元素,无pos参数删除最后
fruits = {"banana","orange","apple"} -- 在末尾插入 table.insert(fruits,"mango") print("索引为 4 的元素为 ",fruits[4]) -- 在索引为 2 的键处插入 table.insert(fruits,2,"grapes") print("索引为 2 的元素为 ",fruits[2]) print("最后一个元素为 ",fruits[5]) table.remove(fruits) print("移除后最后一个元素为 ",fruits[5]) --打印为nil
table.sort(table,[comp]) 按升序排列
fruits = {"banana","orange","apple","grapes"} print("排序前")for k,v in ipairs(fruits) do print(k,v) end table.sort(fruits) print("排序后") for k,v in ipairs(fruits) do print(k,v) end
标签:lua
原文地址:http://11472824.blog.51cto.com/11462824/1771632