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")
相关推荐
wjs20241 分钟前
MongoDB 更新集合名
开发语言
monkey_meng5 分钟前
【遵守孤儿规则的External trait pattern】
开发语言·后端·rust
一只小小汤圆9 分钟前
opencascade源码学习之BRepOffsetAPI包 -BRepOffsetAPI_DraftAngle
c++·学习·opencascade
虾球xz17 分钟前
游戏引擎学习第20天
前端·学习·游戏引擎
LateBloomer77726 分钟前
FreeRTOS——信号量
笔记·stm32·学习·freertos
legend_jz30 分钟前
【Linux】线程控制
linux·服务器·开发语言·c++·笔记·学习·学习方法
Komorebi.py31 分钟前
【Linux】-学习笔记04
linux·笔记·学习
tangliang_cn1 小时前
java入门 自定义springboot starter
java·开发语言·spring boot
程序猿阿伟1 小时前
《智能指针频繁创建销毁:程序性能的“隐形杀手”》
java·开发语言·前端
新知图书1 小时前
Rust编程与项目实战-模块std::thread(之一)
开发语言·后端·rust