声明变量

Lua作为弱类型语言,动态类型语言,定义变量的时候,不需要类型修饰,而且,变量类型可以随时改变。
每行代码结束的时候,要不要分号都可以(和Python、Go、Java Script一样)。

Lua中的变量分为三种:全局变量、局部变量、表字段。
默认创建的都是全局变量,局部变量需要用local修饰,同时变量名需要遵守一定的命名规范:

  1. 变量名 由数字,字母下户线组成,不能以数字开头,也不能是保留字,而且不可以使用特殊字符。
  2. 变量名区分大小写,避免创建下划线开头加大写字母组成的变量名。

基本数据类型

学习每个语言都要知道他的数据类型,Lua也不例外。Lua中有中有八种基本类型: nil、boolean、number、string、function、thread、userdata、table。
我们使用库函数type()来返回一个描述给定值类型的字符串。

nil

nil 相当于Java中的null,表示为空,在Lua中可以作为一个数据类型。

a = nil
print(type(a))
-- 打印结果 
-- nil

boolean

boolean 布尔型,需要注意的是在Lua里,只有false 和nil 才表示为假,0和空串(“”)都是为真。

print(type(true))
print(type(false))
-- 打印结果
-- boolean
-- boolean

number

number 数值型,在其他的语言比如Java中把数值分为四个整型(byte,short,int,long)两个浮点型(float,double),而number是包括整型和浮点型的。

print(type(123)) --打印一个整型
print(type(1.23)) --打印一个浮点型
print(type(1234568910)) --打印一个长整型
-- 打印结果
-- number
-- number
-- number

string

string字符串,同样Lua是不区分字符型或者字符串的,单引号或者双引号都可以用来表示string。

str1="abc"
str2='abc'
str3='a'
print(type(str1))
print(type(str2))
print(type(str3))
-- 打印结果
-- string
-- string
-- string

同样如果需要转义的话使用反斜杠表示,\t 制表符 \n 换行。
不想对字符串中的转义输出的话可以使用[[]]输出

str1="a\nb\tc"
str2=[[a\nb\tc]]
print(str1)
print(str2)
-- 打印结果
-- a
-- b       c
-- a\nb\tc

function

function 函数型,function 在lua 中一个基本的数据类型,是第一类值。什么是第一类值,就是可以作为对象传递的,可以作为函数返回的值。

声明一个function
funcName函数名称,a b为形式参数,return后面是返回值, 形式参数和返回值是可以省略的。

function funcName (a,b)
   --函数体
   return a;
end

当然之前说了function是第一类值,他也可以当作右值,把匿名函数赋值给变量

sum = function(a,b)
    return a+b
end
print(sum(1,2))
-- 打印结果
-- 3

也可以 当作其他函数的参数

function func(funcName,a,b)
    funcName(a,b)
end
print(func(funcName,1,2))
-- 打印结果
-- 1

thread

thread 协程型

userdata

userdata 自定义数据格式

table

table 表,这个表不是数据库中的表,而是作为一种数据类型,类似于map,用k-v的方式来表现,理论上来讲除了nil,其他字符都可以作为key(索引值)

作为哈希集合

--格式
tableName={
	k=v
}

--使用for循环遍历
for k,v in pairs(tableName) do
	print(k,v)
end

也可以作为一个数组,同样使用for循环遍历,虽然没有k,但是会默认从1开始设置k

--格式
tableName={v,v,v} 

--使用for循环遍历
for k,v in pairs(tableName) do
	print(k,v)
end

对map增删查改

--新增字段
tableName[key]=value

--删除字段
tableName[key]=nil

--获取字段
Value = tableName[key]

--修改字段
tableName[key] = newValue