Lua 数据类型

Posted 凌渊科技

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lua 数据类型相关的知识,希望对你有一定的参考价值。



开始学习lua的数据类型

  1. number 实数 ,可以是整数,浮点数

  2. string 字符串,一旦赋值不能被修改,可以通过方法string.gsub()来修改

  3. nil 全局变量没被赋值默认为nil,删除变量就赋值为 nil

  4. boolean(bool) false 和nil为假 ,其它都为真

  5. function 函数

  6. table 数组、容器

  7. userdata (类,其它语言转换过来就变成userdata类型)

  8. thread 线程

需要注意的

  1. Lua中变量没有预定义类型,每个变量可以包含任意类型的值,要用就直接赋值一种数据类型的值

  2. nil类型就nil一个值,表示变量是否被赋值,变量赋值成nil也表示删除变量

  3. 使用Type(xxx变量) 可以获取该变量的数据类型

  4. number 所有数字,int float double 类型等都为number类型了

  5. 字符串一旦赋值不能被修改,可以通过方法string.gsub()来修改,可以写成’xxas’单引号,但是建议用双引号””

  6. number类型可以和全是数字的字符串进行计算,字符串会进行类型转换

  7. .. 连接符号 ,可以连接字符串类型,也可以连接整形的变量,但是如果直接使用真实的数字要在后面加个空格,因为系统会把 数字.. 看出2个浮点 如 1..2 (错误写法) 1 ..2 (正确写法)

  8. 类型不同,比较判断也不会相等,如number类型的123不等于string类型的123

  9. 计算运算符中取余可以和浮点数计算,可以精确到小数级别

  10. 关系运算符中~= 表示不等于,类似其他语言如c的 !=

  11. 逻辑运算符 and ,or ,not 对应 && ,|| , !

  12. 表达式: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 同理 ||

  13. 赋值方式一:多个变量同时赋值,多的变量(变量个数多于值个数)默认为nil,少的变量(变量个数少于值个数)不做处理,可以类型混搭

  14. 局部变量 用local修饰声明 ,内存在栈上,在一个函数,代码块{ }内 函数,代码块结束,内存自动释放

  15. 全局变量在堆上,可以随时创建,程序结束,内存自动释放

  16. 控制语句上,有if for where 没有switch结构

  17. 控制语句上,不需要写 () {} {指代 :then } 指代 :end

  18. 循环结构 while do end ,里面不能写() 以及 ++ – += 类似的运算符

  19. 循环结构 for 也不需要写() 也不在赋值除了对第一个赋值,其他都可以省略写默认写为 <= +xx 或 >= -xx

  20. 函数的返回值和其他语言一样可以返回个值,变量。但是不同的是可以同时返回多个变量,进行多个赋值

  21. table可以有数组的形式,字典的形式,数组字典同时混合的形式

  22. print()打印会默认换行

  23. #号数组是计算数组容器table的下标个数,lua的数组容器下标从1开始计算递增,字典不包括key元素

  24. 有两种遍历结构pairs ,ipairs ,第一个遍历所有元素,第二个只遍历没有key类型的元素(不遍历字典),不能返回nil






01
Lua 数据类型
类型转换tonumber()tostring()
 if tonumber("123") == 123 then
     print("相等")
 else
     print("不相等")
 end12345


Lua 数据类型




02
Lua 数据类型
逻辑运
 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


Lua 数据类型



03 同时赋值

 num1, num2 , num3 = "asd" ,'sdfasdf', 123, 534
 print(num1,num2,num3)12


Lua 数据类型



04
Lua 数据类型
函数与局部变量
 function Func( )
     local  num1 = 100
     num2 = 10
 end
 Func();
 print(num1)
 print(num2)1234567


Lua 数据类型




05
Lua 数据类型
控制语句
 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

Lua 数据类型


06
Lua 数据类型
函数写法
 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


Lua 数据类型
Lua 数据类型
Lua 数据类型





07

table 数组,字典 ,混写

 --数组
 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
8遍历 







 -- 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 数据类型的主要内容,如果未能解决你的问题,请参考以下文章

Lua 中怎么变换数据类型?

lua_基本语法

Lua 数据类型和 Redis 数据类型之间转换

Lua 中 变换数据类型。比如把数字变成string怎么写?

lua数据类型

lua源码笔记-基本数据结构