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 thenprint([=[true]=])
else
print([=[false]=]) --run
end
a=0
if a thenprint("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
还没有评论,来说两句吧...