Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。Lua能应用在很多地方,比如Redis、Nginx等等,因此,掌握一定的Lua基本语法还是有必要的。
Hello World
新建一个 hello.lua
文件,输入以下内容并保存:
print("hello world")
终端输入:
lua .\hello.lua
即可输出Hello World
注释
在Lua中,单行使用 --
,多行注释使用 --[[注释内容--]]
表达式
关系操作符
跟其他语言类似,Lua支持 <
、>
、<=
、>=
、==
、~=
。
逻辑操作符
逻辑操作有 and
、or
和 not
。对于操作符 and
,如果第一个操作数为假,就返回第一个操作数,不然返回第二个操作数。对于操作符 or
,如果第一个操作数为真,就返回第一个操作数。
字符串连接
使用 ..
操作
例:
print("hello".."world")
数据类型
Lua有如下数据类型:
数据类型 | 描述 |
---|---|
nil | 这个最简单,只有值nil属于该类,表示一个无效值(在条件表达式中相当于false)。 |
boolean | 包含两个值:false和true。 |
number | 用于表示实数,Lua没有整数类型,只有double型。 |
string | 字符串由一对双引号或单引号来表示 |
function | Lua中,函数是作为第一类值",可以存储在变量里,可以通过参数传递给其他函数,还可以作为其他函数的返回值。 |
table | Lua 中的表(table)其实是一个"关联数组"(associative arrays),数组的索引可以是数字、字符串或表类型。在 Lua 里,table 的创建是通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表。 |
变量
在Lua脚本中,如果不把变量声明威 local
,无论在函数内还是函数外,均为全局变量。将该变量设置为 nil
时,会回收该变量
例:
-- 变量
a = 10 -- 全局变量
function foo1()
print("=====foo1=====")
print(a)
b = 11 -- 全局变量
local c = 12 -- 局部变量
print(c)
end
function foo2()
print("=====foo2=====")
print(b)
print(c)
b = nil
end
function foo3()
print("=====foo2=====")
print(b)
end
foo1()
foo2()
foo3()
-- 输出
-- =====foo1=====
-- 10
-- 12
-- =====foo2=====
-- 11
-- nil
-- =====foo2=====
-- nil
循环
for
基本语法:var 从 exp1 变化到 exp2,每次变化以 exp3 为步长递增 var,并执行一次 "执行体"。exp3 是可选的,如果不指定,默认为1。
for var=exp1,exp2,exp3 do
<执行体>
end
例:
-- 输出0到3
for i = 0, 3 do
print(i)
end
print("==========")
-- 输出3到0
for i = 3, 0, -1 do
print(i)
end
print("==========")
-- 遍历数组,#arr表示arr的长度
arr = {"a", "b", "c"}
for i = 1, #arr do
print(arr[i])
end
-- 输出
-- 0
-- 1
-- 2
-- 3
-- ==========
-- 3
-- 2
-- 1
-- 0
-- ==========
-- a
-- b
-- c
还有类似于Golang里面的 for range
,Java里面的 for each
的for循环
例:
-- 遍历数组
arr = {"a", "b", "c"}
for i, v in pairs(arr) do
print(i, v)
end
-- 输出
-- 1 a
-- 2 b
-- 3 c
while
i = 0
a = 0
while i <= 10 do
a = a + i
i = i + 1
end
print(a)
-- 输出:
-- 55
流程控制
if
a = 1
if a > 0 then
print("a>0")
end
-- 输出:
-- a>0
if ... else
a = 0
if a > 0 then
print("a>0")
else
print("a<=0")
end
-- 输出:
-- a<=0
if ... elseif ... else
a = 0
if a > 0 then
print("a>0")
elseif a == 0 then
print("a=0")
else
print("a<0")
end
-- 输出:
-- a=0
函数
在Lua中,函数可以作为一个类型的值,储存在变量中,也可以作为其他函数的返回值
-- 函数
function foo1(a, b)
return a + b
end
function foo2()
return foo1
end
f1 = foo1
f2 = foo2()
print(foo1(1, 1))
print(f1(1, 2))
print(f2(1, 3))
-- 输出:
-- 2
-- 3
-- 4