Lua 基础之数据类型

获取类型

Lua 有 nil,boolean,number,string,table,function 和 userdata 七种数据类型。我们可以用 type() 函数来返回一个变量的类型,返回值是 string。

print(type(10))     --number
print(type(nil))    --nil
print(type(true))   --boolean
print(type("hello"))    --string
print(type(print))  --function
print(type({}))     --table
print(type(type))   --function
print(type(type(10)))   --number

弱类型

Lua的变量无需定义,变量的类型也可以随时更换。

value=10
print(value,type(value))
value="this is a string"
print(value,type(value))
value=print
value(value,type(value))

数值类型、布尔类型、空类型

  • Lua 中只有 number 来保存数值,没有整型和浮点型之分。
  • Lua 中除了nil 和 false为 假之外,其余全是真,包括 0。
  • Lua 中没赋值的变量为 nil,我们也可手动给变量赋 nil,相当于删除这个变量。
--boolean
--除了false和nil之外,其它值都是true
print(10>10)    --false
if a then
    print([=[true]=])
else
    print([=[false]=])  --run
end
a=0
if a then
    print("a is true")  --run
else
    print("a is false")
end

--number
--只有浮点数,可用科学计数法
num=0.234
num = num + 1
print(num)  --1.234
num=-1.01e-2
print(num)  -- -0.0101
print(10e3) --10000.0
print(-2.34456e5)   -- -234456.0

--nil
--没声明的变量的值都为nil、手动给变量赋nil相当于删除该变量
print(x)    --nil
print(x == nil) -- true
x=100
print(x == nil) -- false
x=nil
print(x == false)   -- false
print(x == nil) -- true

字符串类型

Lua 中不仅可以用单引号和双引号来表示字符串常量,还可以使用成对的中括号来表示,比如

[[hello]]
[=[hello]=]
[===[hello]===]

这个中括号表示法也可用于多行注释(Lua 的单行注释为 –),比如 --[=[this is a note]=]

--string
--字符串使用8位编码,不可修改内容
str="你好!"
print(str)  --乱码
str="hello world"
print(str)
str=[[hello string ]]
print(str)
str=[==[hello string too]==]
print(str)
str='hello char\nhello char too'
print(str)
--string库
--char转int
print(string.byte(str,0,5)) --104 101 ...
--int转char
print(string.char(104,105)) --hi
--查找子字符串的位置
print(string.find(str,"cha",1,true))
--替换子字符串
s = string.gsub(str, "char", "string")
print(s)
--转为大写
print(string.upper(s))

简单数据类型转换

Lua 简单的数据类型有 nil、number、boolean和string 四种类型。number 和 string可自动相互转换,使用算术运算符可将 string 转成 number(如果不合法会出错),使用 .. 可将 number 转成 string。

--数据类型自动转换
--使用算术运算符转成数字
print("10" + 10)    -- 20
print(1.234-"-10")  --11.234
print("10"*"11")    --110
--print("h" + 1)        -- error
--print(10 + false) -- error
--print(10+nil)     --error

--使用..转换成字符串
print("10"..10)     --1010
print(10..10)       --error
--print("hello" .. false)   -- error
--print("hello"..nil)   --error

table类型

table 是 lua 里面唯一的数据结构,函数、对象等都是用 table 实现的。table 有数字索引和键值对两种存储方式,且两者可以混用。数字索引从 1 开始。可以用 ipairs 迭代器遍历数字索引的元素,用 pairs 迭代器遍历所有元素。

--table
--table是lua唯一的数据结构,是一种键值存储方式,其实lua中的函数,对象等等都是table
arr={}
print(arr,#arr,arr[0])  --table:地址 0 nil
--table的索引从1开始
arr = { 1, 2, 3, 4 }
print(arr[0], arr[1], #arr, arr[#arr])  -- nil 1 4 4
arr = { x = 10, y = "hello" }
print(arr.x, arr["x"])  --10 10
arr['y']=true
print(arr.y, type(arr["y"]))    -- true boolean
--table可以用数字索引和键值对,且两者可混用
arr = { }
arr[10]="first"
arr["10"]="second"
arr["+10"]="third"
i=10 j="10" k="+10"
print(arr[i])   --first
print(arr[j])   --second
print(arr[k])   --third
print(arr[tonumber(j)]) --first
print(arr[tonumber(k)]) --first
--迭代器
for k,v in pairs(arr) do
    print(k,v)
end
arr = { 5, 4, 3, 2, 1 }
for i,v in ipairs(arr) do
    print(i,v)
end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值