Lua 八种数据类型以及基本语法

8种数据类型

  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
  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
类型转换tonumber() tostring()
if tonumber("123") == 123 then
    print("相等")
else
    print("不相等")
end
逻辑运算符
num1 = nil
num2 = 123
result = num1 and num2
print(result)
result2 = num1 or num2
print(result2)
print(not num1) -- nil->取反->true
print(not num2) -- 数字->取反->false
同时赋值
num1, num2 , num3 = "asd" ,'sdfasdf', 123, 534
print(num1,num2,num3)
函数与局部变量
function Func( )
    local  num1 = 100
    num2 = 10
end
Func();
print(num1)
print(num2)
控制语句
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 ?")--不执行了
end

--while循环
sum = 0
count = 1
while count <= 5 do
    sum = sum + count
    count = count + 1 
end
print(sum) -- 1 2 3 4 5 

--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
end
函数写法
function funcA()
local num1 = 10
local num2 = 20
print(num1+num2)
end
funcA() --30

-- 函数返回值
function funcB()
    return 10 > 100 
end
a = funcB()
print(a) -- false
print(funcB()) -- false

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)

function  funcD(a,b,c)
    return a + b + c
end
result = funcD(1,2,3)
print(result)
print(funcD(2,2,8))
--实参个数>形参个数,自动忽略
--实参个数<形参个数,自动补齐nil

--可变个数参数 ...
function  funcE( ... )
    --把可变参数构成表(数组)
    local args = {...}
    --#:计算表长度
    for i = 1 , #args do
        print(args[i])
    end
end
funcE(1,2,"Hello",4,5)
table 数组,字典 ,混写
--数组
t1 = {"星期一","星期二","星期三","星期四"}
print(t1[3])

--字典
--key必须是变量,不能是数字
t2 = {name="Young",age = 23,sex = "girl"}
print(t2.name)
print(t2["name"])
t2.sex = "boy"
print(t2.sex)

--混写
t3 = {name = "AK","星期一",age = 35,"星期二"}
print(t3.name) --AK 
print(t3[1])  --星期一
遍历
-- paris 遍历所有元素 字典无序
for key ,value in pairs(t1) do 
    print(key.." : "..value)
end 


-- ipairs 只能遍历数组,不能遍历字典类型,只能遍历没有key的元素,
for key ,value in ipairs(t1) do 
    print(key.." : "..value)
end

猜你喜欢

转载自blog.csdn.net/liaoshengg/article/details/81299018
今日推荐