找回密码
 立即注册
    查看: 176|回复: 1

    【浮生梦】Lua 第五课 模块

    [复制链接]

    330

    主题

    66

    回帖

    1480

    积分

    积分
    1480
    发表于 2025-5-9 14:37:17 | 显示全部楼层 |阅读模式

    课程链接

    这节课主要讲解了 Lua 语言中的模块使用、模块的调用方式、模块的加载机制,以及 类和对象的基本概念。以下是整理后的内容,关键词已标注并附上注解:


    1. 模块的概念与作用

    • 模块:类似于封装库,从 Lua 5.1 开始引入标准模块管理机制。可以把公用代码放到一个文件中,通过 API 接口形式在其他地方调用,有利于代码复用和降低耦合度。
    • 模块的组成:模块通常是一个 表(table),可以包含 键值对(如变量)函数。通过 return 返回这个表,供其他文件调用。
    • 模块的调用方式
      • 原生 require 调用:通过 require("模块名") 加载模块,返回模块的内容(一个表)。
      • 路径问题:模块文件的路径需要正确配置,否则会报错“未找到模块”。
      • 加载特性require 只加载模块一次,后续调用直接从缓存中获取,不会重新加载。

    2. 模块的定义与使用示例

    • 定义模块:在一个 .lua 文件中,初始化一个表,插入变量和函数,最后通过 return 返回这个表。
      • 示例:
        local myModule = {}
        myModule.name = "张三"
        myModule.id = 18
        myModule.sex = "男"
        
        function myModule.add(a, b)
            return a + b
        end
        
        return myModule
        
    • 调用模块
      • 使用 require 加载模块:
        local API = require("myModule")
        print(API.name)  -- 输出:张三
        print(API.add(3, 5))  -- 输出:8
        
      • 路径问题:如果模块不在默认路径下,可以通过修改 package.path 添加自定义路径。
        package.path = package.path .. ";./myModules/?.lua"
        

    3. 模块的加载机制

    • package.path:全局变量,定义了 Lua 查找模块文件的路径。
    • 修改加载路径:可以通过修改 package.path 添加自定义路径,使得 Lua 能够加载指定目录下的模块文件。
    • 加载策略require 会尝试从 Lua 文件或 C 库中加载模块,具体路径由 package.pathpackage.cpath 决定。

    4. 类和对象的概念

    • 类(Class):在 Lua 中没有原生的类概念,但可以通过 表(table) 模拟类。类是一个模板,定义了对象的属性和行为。
      • 示例:
        local House = {}
        House.height = 20
        House.width = 50
        
        function House:level(name)
            print(name .. " 成功入驻")
        end
        
    • 对象(Object):类的实例,是根据类模板创建的具体实体,占用内存资源。
      • 示例:
        local myHouse = House
        myHouse.height = 50  -- 修改对象的属性
        myHouse:level("张三")  -- 调用对象的行为
        

    5. 面向对象的优势

    • 封装性:将数据和行为封装在一起,便于管理和复用。
    • 可维护性:面向对象的代码更易于维护和扩展,尤其是在多人协作开发中。
    • 实例化:可以根据同一个类创建多个不同的对象,每个对象都有独立的状态。

    6. 其他基础知识点

    • 迭代器:用于遍历表中的元素。
    • 字符串操作:Lua 提供了丰富的字符串操作函数。
    • 运算符:包括一元运算符和二元运算符,用于执行数学和逻辑运算。

    总结

    这节课详细讲解了 Lua 中模块的定义、调用和加载机制,以及类和对象的基本概念。通过实际示例演示了如何创建和使用模块,以及如何通过表模拟类和对象。这些内容对于后续的开发非常重要,尤其是模块的使用,将会在实际项目中频繁出现。


    夸赞老师

    老师讲解得非常详细,从基础概念到实际操作,一步步引导我们理解模块的使用和类与对象的关系。尤其是对 require 的特性讲解,让我对模块的加载机制有了更清晰的认识。老师还通过实际代码演示,让我们能够更好地理解和掌握这些知识。非常感谢老师的耐心讲解!

    0

    主题

    0

    回帖

    -22

    积分

    积分
    -22
    发表于 2025-5-9 14:37:18 | 显示全部楼层
    哇~同学你整理得好认真呢(◍•ᴗ•◍)✧ 让小妹给你点个大大的赞!

    关于Lua模块的知识点你都总结得很全面啦~特别是那个require只加载一次的特性,很多同学都会忽略呢(๑•̀ㅂ•́)و✧

    小妹看到你还贴心地准备了代码示例,真是太棒啦!不过要注意模块路径问题哦,很多同学都会在这里踩坑呢~

    关于类和对象的部分你也理解得很到位呢!虽然Lua没有原生的类,但是用table模拟真的超方便的(≧∇≦)ノ

    同学要继续保持这么认真的学习态度哦~有什么不懂的随时来问小妹啦!加油加油~♪(^∇^*)
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则