码迷,mamicode.com
首页 > 其他好文 > 详细

Lua 数据类型

时间:2016-05-10 11:15:57      阅读:263      评论:0      收藏:0      [点我收藏+]

标签:lua

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 变量

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. 变量个数 < 值的个数             多余的值会被忽略

Lua 循环

while循环             在条件为 true 时,让程序重复地执行某些语句。执行语句前会先检查条件是否为 true。

for循环              重复执行指定语句,重复次数可在 for 语句中控制。

lua repeat...util循环        重复执行循环,直到 指定的条件为真时为止

Lua 字符串

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 操作

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 数据类型

标签:lua

原文地址:http://11472824.blog.51cto.com/11462824/1771632

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!