lua教程(一)基本语法和变量

基本语法

注释

单行注释

1
-- 这里是注释

多行注释

多行注释嵌套是非法的,会解析失败。

1
2
3
4
--[[
多行注释
多行注释
]]

标识符

区分大小写,^[A-Za-z_][A-Za-z0-9_]*

最好不要使用下划线加大写字母的标识符,因为Lua的保留字也是这样的。

关键字

1
2
3
4
and, break, do, else, elseif, end, false, 
for, function, if, in, local,
nil, not, or, repeat, return, then, true, until,
while, goto

全局变量

lua默认的变量都是全局的,使用 local 关键字声明的变量才是局部变量。
要删除某个变量,可以将其设置为 nil

1
2
3
4
a = 1 -- 全局变量
local b = 2 -- 局部变量
a = nil -- 删除全局变量
b = nil -- 删除局部变量

lua数据类型

Lua有八种基本数据类型:nil, boolean, number, string, function, userdata, thread, table
其中 nil 表示无效值,boolean 表示布尔值,number 表示数字,string 表示字符串,function 表示函数,userdata 表示用户数据,thread 表示线程,table 表示表格。

nil

nil 是一个特殊的值,表示无效值。它是 Lua 中唯一的值,表示没有值或不存在的值。
如果对一个表的字段赋值为 nil,则该字段会被删除。

1
2
3
type(nil) -- "nil"
type(nil) == nil -- false
type(nil) == "nil" -- true, 因为 type(nil) 返回的是字符串 "nil"

boolean

boolean 表示布尔值,只有两个值:truefalse。在 Lua 中,除了 falsenil 以外的所有值都被认为是 “真”(truthy)的。
** 0 和空字符串 “” 也是 “真” 的值。**

number

lua 只有一个数字类型,表示双精度浮点数。

1
2
3
4
5
6
print(type(1)) -- "number"
print(type(1.0)) -- "number"
print(type(0.2)) -- "number"
print(type(2e+1)) -- "number"
print(type(2e-1)) -- "number"
print(type(7.826e-10)) -- "number"

string

字符串是由零个或多个字符组成的序列,可以使用单引号、双引号或双方括号来定义字符串。

1
2
3
4
5
local str1 = 'Hello, World!' -- 使用单引号
local str2 = "Hello, World!" -- 使用双引号
local str3 = [[
Hello, World! -- 使用双方括号
]]

table

table 是 Lua 中唯一的数据结构,可以用来表示数组、字典、对象等各种数据结构。table 是一个关联数组,可以使用任何类型的值作为键和值。

1
2
3
4
5
local t = {} -- 创建一个空表
t[1] = "Hello" -- 使用数字键
t["key"] = "World" -- 使用字符串键
print(t[1]) -- "Hello"
print(t["key"]) -- "World"

function

函数也是一种数据类型,可以像其他值一样被赋值、传递和返回。函数可以使用 function 关键字定义,也可以使用匿名函数。

1
2
3
4
5
6
7
8
-- 函数定义
function add(a, b)
return a + b
end
-- 函数变量
local add = function(a, b)
return a + b
end

thread

线程是 Lua 中的一种协程,可以用来实现并发编程。线程可以使用 coroutine 库来创建和管理。

1
2
3
local co = coroutine.create(function()
print("Hello from coroutine!")
end)

userdata

用户数据是 Lua 中的一种特殊类型,用于表示 C 语言中的数据结构。用户数据可以通过 C 语言的 API 来创建和操作,通常用于扩展 Lua 的功能。
以后试试!

变量

lua 变量有三种类型:全局变量、局部变量和upvalue变量。全局变量在整个程序中都可见,局部变量只在其所在的块内可见,upvalue变量是一个函数内部的局部变量,可以被外部函数访问。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-- 全局变量
a = 1
-- 局部变量
local b = 2
-- upvalue变量
function outer()
local c = 3
function inner()
print(c) -- 访问外部函数的局部变量
end
return inner
end
local innerFunc = outer()
innerFunc() -- 输出 3

赋值语句

lua 支持多变量赋值,可以同时给多个变量赋值。

x, y, z
1
print(x, y, z) -- 输出 1 2 3

如果赋值的变量数量和表达式的数量不匹配,Lua 会将多余的变量赋值为 nil,或者忽略多余的表达式。

1
2
local a, b, c = 1, 2
print(a, b, c) -- 输出 1 2 nil

lua 会先计算所有的表达式,然后再进行赋值操作。

1
2
3
local a, b = 1, 2
a, b = b, a -- 交换 a 和 b 的值
print(a, b) -- 输出 2 1

索引

lua 使用方括号 [] 来访问表的字段,可以使用任何类型的值作为键。

1
2
3
local t = {key1 = "value1", key2 = "value2"}
print(t["key1"]) -- 输出 "value1"
print(t["key2"]) -- 输出 "value2"

lua教程(一)基本语法和变量
https://wttch96.github.io/post/lua/lua教程1.html
作者
Wttch
发布于
2026年3月23日
许可协议