Lua 数据类型
Posted 凌渊科技
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lua 数据类型相关的知识,希望对你有一定的参考价值。
number 实数 ,可以是整数,浮点数
string 字符串,一旦赋值不能被修改,可以通过方法string.gsub()来修改
nil 全局变量没被赋值默认为nil,删除变量就赋值为 nil
boolean(bool) false 和nil为假 ,其它都为真
function 函数
table 数组、容器
userdata (类,其它语言转换过来就变成userdata类型)
thread 线程
需要注意的
Lua中变量没有预定义类型,每个变量可以包含任意类型的值,要用就直接赋值一种数据类型的值
nil类型就nil一个值,表示变量是否被赋值,变量赋值成nil也表示删除变量
使用Type(xxx变量) 可以获取该变量的数据类型
number 所有数字,int float double 类型等都为number类型了
字符串一旦赋值不能被修改,可以通过方法string.gsub()来修改,可以写成’xxas’单引号,但是建议用双引号””
number类型可以和全是数字的字符串进行计算,字符串会进行类型转换
.. 连接符号 ,可以连接字符串类型,也可以连接整形的变量,但是如果直接使用真实的数字要在后面加个空格,因为系统会把 数字.. 看出2个浮点 如 1..2 (错误写法) 1 ..2 (正确写法)
类型不同,比较判断也不会相等,如number类型的123不等于string类型的123
计算运算符中取余可以和浮点数计算,可以精确到小数级别
关系运算符中~= 表示不等于,类似其他语言如c的 !=
逻辑运算符 and ,or ,not 对应 && ,|| , !
表达式:a and b a为假则返回a 否则返回b, a or b a为真返回a否则返回b ,简单理解and就是先判断a a正确就继续判断b,如果b也正确返回btrue,则if(a and b) 为true ,这实际上也是&&的使用原理一样 ,如果a为假就是false直接返回a if(a and b) 就是false了 。or 同理 ||
赋值方式一:多个变量同时赋值,多的变量(变量个数多于值个数)默认为nil,少的变量(变量个数少于值个数)不做处理,可以类型混搭
局部变量 用local修饰声明 ,内存在栈上,在一个函数,代码块{ }内 函数,代码块结束,内存自动释放
全局变量在堆上,可以随时创建,程序结束,内存自动释放
控制语句上,有if for where 没有switch结构
控制语句上,不需要写 () {} {指代 :then } 指代 :end
循环结构 while do end ,里面不能写() 以及 ++ – += 类似的运算符
循环结构 for 也不需要写() 也不在赋值除了对第一个赋值,其他都可以省略写默认写为 <= +xx 或 >= -xx
函数的返回值和其他语言一样可以返回个值,变量。但是不同的是可以同时返回多个变量,进行多个赋值
table可以有数组的形式,字典的形式,数组字典同时混合的形式
print()打印会默认换行
#号数组是计算数组容器table的下标个数,lua的数组容器下标从1开始计算递增,字典不包括key元素
有两种遍历结构pairs ,ipairs ,第一个遍历所有元素,第二个只遍历没有key类型的元素(不遍历字典),不能返回nil
-
if tonumber("123") == 123 then
print("相等")
else
print("不相等")
end12345
num1 = nil
num2 = 123
result = num1 and num2
print(result)
result2 = num1 or num2
print(result2)
print(not num1) -- nil->取反->true
print(not num2) -- 数字->取反->false12345678
num1, num2 , num3 = "asd" ,'sdfasdf', 123, 534
print(num1,num2,num3)12
function Func( )
local num1 = 100
num2 = 10
end
Func();
print(num1)
print(num2)1234567
num = 75
if num < 60 then
print("num < 60")
print(";-)")
elseif num > 70 and num < 75 then --elseif 不加空格,
print("num > 70 and num < 75")
elseif num < 60 or num >= 75 then
print("num < 60 or num >= 75") -- 打印
else
print("num ?")--不执行了
end1234567891011
--while循环
sum = 0
count = 1
while count <= 5 do
sum = sum + count
count = count + 1
end
print(sum) -- 1 2 3 4 5 12345678
--for
for num = 1,10,2 do
print(num) -- 1 3 5 7 9
end
for num2 = 10 ,0, -2 do
print(num2) -- 10 8 6 4 2 0
end12345678
function funcA()
local num1 = 10
local num2 = 20
print(num1+num2)
end
funcA() --30123456
-- 函数返回值
function funcB()
return 10 > 100
end
a = funcB()
print(a) -- false
print(funcB()) -- false1234567
function funcC()
return 100,200,"3"
end
num3,num4,num5 = funcC()
print(num3..num4..num5)--1002003
print(funcC())--100 200 3 --省略逗号
num6,num7,num8 = funcC(),1
print(num6..num7)
print(num8)12345678910
function funcD(a,b,c)
return a + b + c
end
result = funcD(1,2,3)
print(result)
print(funcD(2,2,8))
--实参个数>形参个数,自动忽略
--实参个数<形参个数,自动补齐nil12345678
--可变个数参数 ...
function funcE( ... )
--把可变参数构成表(数组)
local args = {...}
--#:计算表长度
for i = 1 , #args do
print(args[i])
end
end
funcE(1,2,"Hello",4,5)12345678910
--数组
t1 = {"星期一","星期二","星期三","星期四"}
print(t1[3])123
--字典
--key必须是变量,不能是数字
t2 = {name="Young",age = 23,sex = "girl"}
print(t2.name)
print(t2["name"])
t2.sex = "boy"
print(t2.sex)1234567
--混写
t3 = {name = "AK","星期一",age = 35,"星期二"}
print(t3.name) --AK
print(t3[1]) --星期一1234
-- paris 遍历所有元素 字典无序
for key ,value in pairs(t1) do
print(key.." : "..value)
end 1234
-- ipairs 只能遍历数组,不能遍历字典类型,只能遍历没有key的元素,
for key ,value in ipairs(t1) do
print(key.." : "..value)
end
以上是关于Lua 数据类型的主要内容,如果未能解决你的问题,请参考以下文章