• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >Lua > Lua极简入门指南(六):模块

Lua极简入门指南(六):模块

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了lua游戏开发实践指南,lua编程指南,lua编程指南pdf,lua游戏ai开发指南,lua游戏ai开发指南pdf等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

从用户的角度来看,一个模块能够通过 require 加载并返回一个 table,模块导出的接口都被定义在此 table 中(此 table 被作为一个 namespace)。所有的标准库都是模块。标准库被预先加载了,就像这样:

math = require 'math'
string = require 'string'
</div>

require 函数

使用 require 函数加载模块能够避免多次重复加载模块。加载一个模块:

require 'modulename'
</div>

模块名(modulename)不那么准确的来说就是一个文件名(Lua 文件或者是 C 库)。一个模块被加载后会被缓存到 pacakge.loaded[modulename] 中。看一个例子:

-- test.lua
print 'Hello World'
</div>

在 test.lua 的相同目录下创建 main.lua 文件:

-- main.lua
require 'test'
</div>

我们可以尝试多次 require test.lua 文件,但最终只会输出一次 Hello World。如果我们希望 require 重新加载模块,那么可以清理 package.loaded:

package.loaded[modulename] = nil
</div>

范例:

require 'test'  --> Hello World
package.loaded.test = nil
require 'test'  --> Hello World
</div>

编写模块

编写一个模块很简单,我们先创建一个 table 然后把需要导出的接口放入 table 中,最后返回此 table:

-- test.lua
local exports = {}
 
function exports.foo()
    print 'Hello World'
end
 
return exports
</div>

模块的返回值会被赋值给 package.loaded[modulename]:

assert(require 'test' == package.loaded.test)
</div>

如果模块不返回值,那么 package.loaded[modulename] 的值将为 true:

-- 假定 test.lua 是一个空文件
local t = require 'test'
print(t)                    --> true
print(package.loaded.test)  --> true
</div>

更多的编写模块的方法见:http://lua-users.org/wiki/ModulesTutorial

查找模块

如果一个模块使用 Lua 编写,那么将在 package.path 中查找,如果一个模块使用 C 编写,那么将在 package.cpath 中查找。package.path 和 package.cpath 是一个分号分隔的路径列表,例如:

C:\bin\lua\lua\?.lua;C:\bin\lua\lua\?\init.lua;C:\bin\lua\?.lua;C:\bin\lua\?\init.lua;.\?.lua
</div>

每一个路径都有一个 ?,真正的查找路径是将 ? 替换为模块名之后的路径。

实际上,我们可以自定义查找模块的规则(通过向 package.searchers 中添加适当的 searcher 函数实现),例如我们可以把所有模块保存在一个加密并压缩的 zip 文件中。

一个模块命名为 mod.sub,其是 mod 的子模块。在查找模块时,mod.sub 中的 . 号会被转换为目录分隔符。假定路径列表如下:

C:\bin\lua\lua\?.lua;.\?.lua
</div>

那么 require ‘a.b' 将尝试打开文件:

C:\bin\lua\lua\a\b.lua
.\a\b.lua
</div>

</div>

您可能想查找下面的文章:

  • Lua 极简入门指南(七):面向对象编程
  • Lua极简入门指南(六):模块
  • Lua极简入门指南(一):函数篇
  • Lua极简入门指南(一):基础知识篇

相关文章

  • Lua极简入门指南:全局变量
  • Lua中的函数代码实例
  • Lua教程(二十一):编写C函数的技巧
  • Lua中的基本数据类型详细介绍
  • Lua教程(二):C++和Lua相互传递数据示例
  • 简单讲解Lua中的垃圾回收机制
  • Lua中基本的数据类型、表达式与流程控制语句讲解
  • Lua基础教程之赋值语句、表达式、流程控制、函数学习笔记
  • Lua中的元表(metatable)、元方法(metamethod)详解
  • Lua脚本语言基本语法快速入门教程

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • Lua编程示例(六): C语言调用Lua函数
    • Lua和C++的通信流程代码实例
    • Lua中的闭包学习笔记
    • 用sysbench来测试MySQL的性能的教程
    • Lua中__index和__newindex之间的沉默与合作
    • Lua模拟面向对象示例分享
    • 浅析Lua编程中的异常处理
    • Lua table中安全移除元素的方法
    • Lua中的协同程序详解
    • 详解Lua中的元表概念

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有