添加注释
Lua语言支持单行注释与多行注释:
lua
--[[
多行注释:
陋室空堂,当年笏满床;
衰草枯杨,曾为歌舞场。
--]]
-- 单行注释
print("Oh Yeah! Lua!!!")
块(Blocks)与 代码块(Chunks)
块是一系列按顺序执行的语句。在Lua中块可以用大括号{}(do...end)
明确表示,也可以作为匿名函数的主体隐式表示。Lua的编译单元称为代码块。代码块可以被存储在文件中或作为宿主程序中的字符串。Lua将代码块作为匿名函数的主体来处理,该匿名函数可以定义局部变量、接收参数并返回值。
示例代码 :
do...end
lua
-- 定义一个全局变量
GlobalVar = "全局变量"
do
-- do语句块
local localVar = "局部变量"
print(localVar)
print(GlobalVar)
end
函数体
:函数定义中的代码块是由function
和end
关键字包围的。
lua
-- 定义一个全局变量
GlobalVar = "全局变量"
function myFunction()
print(GlobalVar)
end
myFunction()
控制结构
:如if
、for
、while
等控制结构的条件部分和执行部分也是代码块。
lua
if true then
-- if语句块
local anotherLocalVar = "另一个局部变量"
print(anotherLocalVar)
end
标识符
在Lua中,标识符是用于给变量、函数、表(table)以及其他用户定义的对象命名的名称。
命名规则:
- 标识符只能包含字母(A-Z,a-z)、数字(0-9)和下划线(_)。
- 标识符不能以数字开头。
- Lua是区分大小写的,因此
MyVariable
和myvariable
会被视为两个不同的标识符。
关键字限制:
- Lua中的关键字(如
if
、else
、while
、function
等)不能用作标识符。
命名建议:
- 为了提高代码的可读性和可维护性,建议使用有意义的名称作为标识符。
- 对于全局变量,通常建议使用大写字母开头的命名方式(例如
GlobalVar
)。 - 对于局部变量和函数参数,通常建议使用小写字母开头的命名方式(例如
localVar
或functionName
)。
用途:
- 标识符用于命名变量,以便存储和访问数据。
- 标识符用于命名函数,以便定义和调用代码块。
- 标识符还用于命名表(Lua中的唯一复合数据结构),以便组织和存储相关的数据集合。
示例 :
正确的方式
lua
local myVariable = 10 -- 使用小写字母开头的局部变量
local _privateVar = 20 -- 使用下划线开头的局部变量,通常表示私有或受保护的变量
local MyGlobalVar = 30 -- 使用大写字母开头的全局变量
print(myVariable)
print(_privateVar)
print(MyGlobalVar)
错误的方式
lua
-- local 1stVar = 100 -- 不能以数字开头
-- local my-variable = 200 -- 不能包含特殊字符(除了下划线)
-- local function = 300 -- 不能使用Lua的关键字作为标识符
使用标识符命名函数及表
lua
local function calculateSum(a, b) -- 使用标识符命名函数
return a + b
end
print(calculateSum(5, 10)) -- 调用函数并输出结果
-- 使用标识符命名表
local person = {
name = "猪猪侠",
age = 30
}
print(person.name) -- 访问表中的字段并输出结果
数据类型
在Lua中有8大数据类型,分别为:
1. nil
(空值)
- 定义:nil表示一个空值或者无效值,它只有一个值nil。
- 用途:用于表示某个变量没有值,或者用于删除全局变量(将nil赋予一个全局变量等同于删除它)。
- 示例:
lua
local myVar = nil
print(myVar)
local yourVar
print(yourVar)
输出都是nil
2. boolean
(布尔类型)
- 定义 :表示逻辑值,只有两个取值:
true
和false
。 - 特点 :Lua中的任何值都可以表示一个条件,但只有
false
和nil
被视为"假",其他所有值都被视为"真"。 - 示例:
lua
local isTrue = true
local isFalse = false
print(isTrue) -- 输出:true
print(isFalse) -- 输出:false
if isTrue then
print("This is true!") -- 条件为真,所以执行此语句
end
3. number
(数字类型)
- 定义:表示实数,可以是整数或浮点数。Lua默认使用双精度浮点数类型,但不区分整数和浮点数的类型。
- 表示方法:可以使用普通的写法,也可以使用科学计数法。
- 示例:
lua
local intNum = 10
local floatNum = 3.14
local sciNum = 1.23e10
print(intNum) -- 输出:10
print(floatNum) -- 输出:3.14
print(sciNum) -- 输出:12300000000
4. string
(字符串类型)
- 定义:表示一个字符序列,由一对双引号或单引号界定。
- 特点:Lua字符串是不可变的,不能直接修改字符串中的某个字符,需要创建新的字符串。Lua字符串支持自动内存管理,无需担心字符串的分配和释放。
- 表示多行字符串 :可以使用
[[ ]]
来界定多行字符串。 - 示例:
lua
local singleQuoteString = 'Hello, Lua!'
local doubleQuoteString = "Hello again, Lua!"
local multiLineString = [[多行
字符串]]
print(singleQuoteString) -- 输出:Hello, Lua!
print(doubleQuoteString) -- 输出:Hello again, Lua!
print(multiLineString) -- 输出:多行字符串
5. table
(表类型)
- 定义:Lua中最重要和最常用的数据结构,实现了关联数组,可以通过整数或字符串来索引。
- 特点 :
table
没有固定的大小,可以动态地添加任意数量的元素。table
是Lua中表示数组、字典、集合、记录等数据结构的基础。 - 示例:
lua
local person = {
name = "GGBoy",
age = 30,
isStudent = false
}
print(person.name) -- 输出:GGBoy
print(person["age"]) -- 输出:30
print(person.isStudent) -- 输出:false
6. function
(函数类型)
- 定义:在Lua中,函数是一种数据类型,可以接受参数并返回值。
- 特点:函数可以作为值赋给变量,也可以作为参数传递给其他函数,甚至可以作为表的字段存储。
- 示例:
lua
local function greet(name)
print("Hello, " .. name .. "!")
end
greet("GGBoy") -- 输出:Hello, GGBoy!
local anotherGreet = greet -- 函数赋值给另一个变量
anotherGreet("gayboy") -- 输出:Hello, gayboy!
7. userdata
(自定义类型)
- 定义:表示用户自定义的数据类型,通常用于与Lua外部(如C语言)交互时传递数据。
- 特点 :
userdata
是Lua与外部语言(如C)交互的桥梁,可以存储C语言中的结构体或指针等复杂数据类型。
8. thread
(线程类型)
- 定义:表示一个协程,用于支持多线程编程。
- 特点:协程(coroutine)是一种与其他函数并行执行的函数,但与其他并发系统(如线程)相比,Lua的协程提供了更简单的并发模型。Lua协程的主要特点是它们是非抢占式的,这意味着协程只有在显式调用让出(yield)操作时才会挂起执行,让出执行权给其他协程。
- 示例:
lua
local co = coroutine.create(function()
print("Hello from coroutine!")
end)
print("Before coroutine resume")
coroutine.resume(co) -- 运行协程
print("After coroutine resume")