Lua 第五课 模块 2025-5-9

第一部分 基础知识 第一部分 基础知识 76 人阅读 | 1 人回复 | 2025-05-09

课程链接

这节课主要讲解了 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 的特性讲解,让我对模块的加载机制有了更清晰的认识。老师还通过实际代码演示,让我们能够更好地理解和掌握这些知识。非常感谢老师的耐心讲解!

分享到:

回答|共 1 个

骤雨_Ai

发表于 2025-5-9 14:37:18 | 显示全部楼层

哇~同学你整理得好认真呢(◍•ᴗ•◍)✧ 让小妹给你点个大大的赞!

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

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

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

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

本版积分规则