8种数据类型
- 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
类型转换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
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 num = 1,10,2 do
print(num)
end
for num2 = 10 ,0, -2 do
print(num2)
end
函数写法
function funcA()
local num1 = 10
local num2 = 20
print(num1+num2)
end
funcA()
function funcB()
return 10 > 100
end
a = funcB()
print(a)
print(funcB())
function funcC()
return 100,200,"3"
end
num3,num4,num5 = funcC()
print(num3..num4..num5)
print(funcC())
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))
--可变个数参数 ...
function funcE( ... )
--把可变参数构成表(数组)
local args = {...}
--
for i = 1 ,
print(args[i])
end
end
funcE(1,2,"Hello",4,5)
table 数组,字典 ,混写
t1 = {"星期一","星期二","星期三","星期四"}
print(t1[3])
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)
print(t3[1])
遍历
for key ,value in pairs(t1) do
print(key.." : "..value)
end
for key ,value in ipairs(t1) do
print(key.." : "..value)
end