Lua语言基础学习:添加注释、块、标识符、数据类型

添加注释

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 

函数体:函数定义中的代码块是由functionend关键字包围的。

lua 复制代码
-- 定义一个全局变量  
GlobalVar = "全局变量"

function myFunction()  
    print(GlobalVar)  
end

myFunction()

控制结构:如ifforwhile等控制结构的条件部分和执行部分也是代码块。

lua 复制代码
if true then  
    -- if语句块  
    local anotherLocalVar = "另一个局部变量"  
    print(anotherLocalVar) 
end  

标识符

在Lua中,标识符是用于给变量、函数、表(table)以及其他用户定义的对象命名的名称。

命名规则

  • 标识符只能包含字母(A-Z,a-z)、数字(0-9)和下划线(_)。
  • 标识符不能以数字开头。
  • Lua是区分大小写的,因此MyVariablemyvariable会被视为两个不同的标识符。

关键字限制

  • Lua中的关键字(如ifelsewhilefunction等)不能用作标识符。

命名建议

  • 为了提高代码的可读性和可维护性,建议使用有意义的名称作为标识符。
  • 对于全局变量,通常建议使用大写字母开头的命名方式(例如GlobalVar)。
  • 对于局部变量和函数参数,通常建议使用小写字母开头的命名方式(例如localVarfunctionName)。

用途

  • 标识符用于命名变量,以便存储和访问数据。
  • 标识符用于命名函数,以便定义和调用代码块。
  • 标识符还用于命名表(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(布尔类型)

  • 定义 :表示逻辑值,只有两个取值:truefalse
  • 特点 :Lua中的任何值都可以表示一个条件,但只有falsenil被视为"假",其他所有值都被视为"真"。
  • 示例
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")
相关推荐
cwtlw36 分钟前
CSS学习记录20
前端·css·笔记·学习
数据小小爬虫42 分钟前
Python爬虫获取AliExpress商品详情
开发语言·爬虫·python
小爬虫程序猿43 分钟前
利用Python爬虫速卖通按关键字搜索AliExpress商品
开发语言·爬虫·python
一朵好运莲1 小时前
React引入Echart水球图
开发语言·javascript·ecmascript
紫罗兰盛开1 小时前
分布式调度框架学习笔记
笔记·学习
Eiceblue1 小时前
使用Python获取PDF文本和图片的精确位置
开发语言·python·pdf
xianwu5431 小时前
反向代理模块。开发
linux·开发语言·网络·c++·git
Kobebryant-Manba1 小时前
kafka基本概念
分布式·学习·kafka
scoone1 小时前
VSCode 性能优化指南:提高编码效率,减少资源占用
ide·vscode·编辑器
xiaocaibao7771 小时前
Java语言的网络编程
开发语言·后端·golang