--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 变量中调用。 --]]
|