Lua基本数据类型

基本数据类型

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值