Lua 基础之数据类型

来源:互联网 发布:怎么加入淘宝优惠群 编辑:程序博客网 时间:2024/05/17 02:15

获取类型

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

print(type(10))     --numberprint(type(nil))    --nilprint(type(true))   --booleanprint(type("hello"))    --stringprint(type(print))  --functionprint(type({}))     --tableprint(type(type))   --functionprint(type(type(10)))   --number

弱类型

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

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

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

  • Lua 中只有 number 来保存数值,没有整型和浮点型之分。
  • Lua 中除了nil 和 false为 假之外,其余全是真,包括 0。
  • Lua 中没赋值的变量为 nil,我们也可手动给变量赋 nil,相当于删除这个变量。
--boolean--除了false和nil之外,其它值都是trueprint(10>10)    --falseif a then    print([=[true]=])else    print([=[false]=])  --runenda=0if a then    print("a is true")  --runelse    print("a is false")end--number--只有浮点数,可用科学计数法num=0.234num = num + 1print(num)  --1.234num=-1.01e-2print(num)  -- -0.0101print(10e3) --10000.0print(-2.34456e5)   -- -234456.0--nil--没声明的变量的值都为nil、手动给变量赋nil相当于删除该变量print(x)    --nilprint(x == nil) -- truex=100print(x == nil) -- falsex=nilprint(x == false)   -- falseprint(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转intprint(string.byte(str,0,5)) --104 101 ...--int转charprint(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)    -- 20print(1.234-"-10")  --11.234print("10"*"11")    --110--print("h" + 1)        -- error--print(10 + false) -- error--print(10+nil)     --error--使用..转换成字符串print("10"..10)     --1010print(10..10)       --error--print("hello" .. false)   -- error--print("hello"..nil)   --error

table类型

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

--table--table是lua唯一的数据结构,是一种键值存储方式,其实lua中的函数,对象等等都是tablearr={}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 4arr = { x = 10, y = "hello" }print(arr.x, arr["x"])  --10 10arr['y']=trueprint(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])   --firstprint(arr[j])   --secondprint(arr[k])   --thirdprint(arr[tonumber(j)]) --firstprint(arr[tonumber(k)]) --first--迭代器for k,v in pairs(arr) do    print(k,v)endarr = { 5, 4, 3, 2, 1 }for i,v in ipairs(arr) do    print(i,v)end
原创粉丝点击