基本数据类型
--type函数 判断数据类型
--[[
print(type("hello world"))
print(type(10.4*3))
print(type(print))
print(type(type))
print(type(true))
print(type(nil))
print(type(type(x)))
--]]
--nil类型
--[[
--nil 表示空值
print(type(a)) --打印一个没有赋值的变量,会输出nil
--删除变量 ,用nil给变量赋值
tab1 = { key1="val1",key2="val2","val3"}
for k,v in pairs(tab1) do
print(k .."-".. v)
end
tab1.key1=nil
for k,v in pairs(tab1) do
print(k .."-".. v)
end
--nil做比较时应该加双引号",此话的意思应放在适当情景,转换成相同类型,再进行比较
type(x)
print(type(x))
print(type(type(x)))
print(type(x)==nil) --当不加双引号时,此时判断的结果为false, type(type(x))为string
print(type(x)=="nil") --当加上双引号时,判断结果为true,”“表示字符串
print(x==nil) --直接比较值,结果为true
print(x=="nil") --结果为false,x为nil类型,而"nil"为string类型
--]]
--boolean类型
--[[
--Lua 把 false 和 nil 看作是 false,其他的都为 true,数字 0 也是 true.
print(type(true))
print(type(false))
print(type(nil))
--对以下代码有点不懂,没有理解
if false or nil then
print("至少有一个是true")
else
print("false 和 nil 都为 false")
end
if 0 then
print("数字0是true")
else
print("数字0是false")
end
--]]
--number (数字)类似于整数,浮点;但这里统一称为number
--[[
print(2)
print(type(2))
print(type(2.2))
print(type(2e+1))
print(type(0.3e-1))
--结果显示都为number类型
--]]
--string 字符串类型
--[[
-- 可以用一对双引号或单引号表示
string1="liuzhifeng"
string2='lzf'
print(string1)
print(string2)
-- 也可以使用两对方括号 来表示“一块”字符串
--在进行算数运算,lua会将数字字符串转换为number
print("2"+6) --结果为8
--print("error"+1) 这时会报错,不能将"error"转为number类型
--字符串连接符:..
print("liuzhifeng ".."is handsome")
--字符串长度:#
string="liuzhifeng"
print(#string) --结果为10
print(#"lizuhifeng") --结果为10
--]]
--table(表),lua里面的一种数据结构 ,类似于c++ stl中的vector
--[[
--创建table,通过构造表达式。{ }相当于C++里面的构造表
local table={}
local table={"appple","pear","orange","grape"}
for i,j in pairs(table) do
print(i..":"..j)
end
--Lua 中的表(table)其实是一个"关联数组"(associative arrays),数组的索引可以是数字或者是字符串。
a={}
a["key"]="value"
key=1
a[key]=3
a[key]=a[key]+4
for i,j in pairs(a) do
print(i..":"..j)
end
--lua中table里面的默认索引以1开始 ,不同于c,c++
local table={"appple","pear","orange","grape"}
for key,val in pairs(table) do
print(key..":"..val)
end
--table大小不固定,根据添加减少自动变化,没初识的都为nil, 这点就像c++stl里的vector
--]]
--function 函数
--[[
--在 Lua 中,函数是被看作是"第一类值(First-Class Value)",函数可以存在变量里:
function factorial1(n) --function 函数名(参数)
if n == 0 then
return 1
else
return n * factorial1(n - 1)
end
end
print(factorial1(5))
factorial2 = factorial1
print(factorial2(5))
--function可以以匿名函数的方式通过参数传递
function testFun(tab,fun)
for k,v in pairs(tab) do
print(fun(k,v))
end
end
tab={key1="val1",key2="val2"}
testFun(tab,function(key,val) --重点,竟然还可以这样使用
return key.."="..val --直接return返回参数
end
);
--]]
--thread 线程
--[[
在 Lua 里,最主要的线程是协同程序(coroutine)。
它跟线程(thread)差不多,拥有自己独立的栈、局部变量和指令指针,可以跟其他协同程序共享全局变量和其他大部分东西。
线程跟协程的区别:线程可以同时多个运行,而协程任意时刻只能运行一个,并且处于运行状态的协程只有被挂起(suspend)时才会暂停。
--]]
--userdata 用户自定义类型
--[[
userdata 是一种用户自定义数据,用于表示一种由应用程序或 C/C++ 语言库所创建的类型,
可以将任意 C/C++ 的任意数据类型的数据(通常是 struct 和 指针)存储到 Lua 变量中调用。
--]]