跳到主要内容

Lua语言学习笔记

·232 字·2 分钟

Lua (英语发音:/ˈluːə/)是一种轻量级的脚本语言,可以方便的嵌入到其他语言中,很易学习。它是用C语言编写的。广泛应用于游戏和 web 开发中。据说 Adobe Photoshop Lightroom 中 50% 的代码是有 Lua 写的。我学习这个语言是因为目前的项目要用到 LuCI 。

1.Hello World #

Mac 平台默认已经安装了 Lua , 直接执行 lua 就可以进入它的 shell , 首先输出一个 Hello World , 语法很像 C , 结尾有没有分号都可以:

[18:54]~/ ❯ lua
Lua 5.2.3  Copyright (C) 1994-2013 Lua.org, PUC-Rio
> print("Hello World")
Hello World
> 

也可以写一个脚本文件,直接执行:

[18:57]Workspace/ ❯ cat test.lua 
#!/usr/local/bin/lua
print("Hello World")
[18:57]Workspace/ ❯ ./test.lua 
Hello World

2.基本语法 #

注释 #

两个减号是行注释,两个减号加方括号是块注释:

#!/usr/local/bin/lua
--行注释
--[[
块注释
--]]
print("Hello World")

数据类型和变量 #

Lua 支持动态数据类型,定义变量时无需声明类型,几个基本的数据类型有:

  • 字符串,用引号包含,单引号和双引号都可以;Lua 还支持 C 语言类型的转义字符,例如 \n 换行,\r 回车
  • 实数,Lua 的数只有 double 型,64 bits 浮点数
  • 布尔,true 和 false
  • 空,Lua 的空类型用 nil 表示,没有声明过的变量就是 nil

type 是一个函数,它会返回数据的类型

Lua 中的变量分为全局变量和局部变量,未加说明的都是全局变量,用 local 关键字定义局部变量 :

theGlobalVar = 50
local theLocalVar = "local variable"

表达式 #

Lua 的表达式由数字,字符串,变量,运算符组成,运算符分为几个类别,和 C 语言很像:

  • 数学运算符:+-*/^ (加减乘除幂),- (负号),这些运算符只能用于实数
  • 关系运算符:< ,> ,<= ,>= ,== ,还有一个 ~= 表示不等;比较结果返回 true 或 false ;如果两个值的类型不同,那么一定是不等的,nil 之和自己相等;比较字符串时,是按照字母的顺序进行的
  • 逻辑运算符:and , or , not ;not 只会返回 true 和 false,除了 false 和 nil ,其他都是 true ,所以 not nil 就是 ture。and 和 or 返回的结果不是 true 或 false,而是和操作数有关:a and b – 如果a为false,则返回a,否则返回b;a or b – 如果a为true,则返回a,否则返回b
  • 连接运算符:..(两个点),用于连接字符串,如果操作符是数字,会连接后转为字符串。

控制语句 #

if 语句

if conditions then
	then-part
end;

if conditions then
	then-part
else
	else-part
end;

if conditions then
	then-part
elseif conditions then
	elseif-part
..       --->多个elseif
else
	else-part
end;

while 循环

while condition do
    statements;
end;

for 循环

for var=exp1,exp2,exp3 do
	loop-part
end

exp1 是初始值,exp2 是终止值,exp3是每一步的间隔,如果exp3,默认是1,例如:

函数 #

函数的定义以 function 关键字开头,以 end 结尾,可以返回多个值。

Lua 有个特别的语法,就是可以一行为多个变量赋值,那么多个返回值就可以依次赋给多个变量。如果值的数量比变量多,多余的会舍弃;如果变量比值多,后面的变量会被赋 nil 。