文档章节

如何创建一个 Lua 模块

FreeBlues
 FreeBlues
发布于 2016/07/23 10:57
字数 427
阅读 36
收藏 0

如何创建一个 Lua 模块

翻译自: How to Create a Lua Module

  • 译者: FreeBlues

正文

Lua编程语言 中的一个 模块(module)是一个包含函数和变量的代码片段: 它是一个用户库. 它是把你的代码切分为多个文件的一种有力方法. 一个 模块Lua 关键字 require 来加载. 模块 被编码到一个以 .lua 作为扩展名的文件中, 并且这个文件必须出现在 Lua 包搜索路径(package.path) 中.

一个 模块 实际上就是一个带有函数的 Lua 表(table)(这里有关于 Lua 的一个快速介绍). 这个表在 模块 文件的最后被返回. 这里有一个叫做 DemoLib.lua 的简单的 Lua模块 的例子:

文件模块: DemoLib.lua

local demo_mod = {} -- The main table
 
function demo_mod.Mult(a, b)
  return a * b
end
 
return demo_mod

现在在 Luamain 代码中, 我们可以加载这个 模块, 并且开始通过下面的代码来使用它:

-- Update the search path
local module_folder = "/home/jegx/my_kool_mods/"
package.path = module_folder .. "?.lua;" .. package.path
 
-- Load the module
demo = require "DemoLib"
 
-- Use it!
local result = demo.Mult(10, 2)

如果 模块 不在 Lua 搜索路径中, 你可以用保存着 模块 文件的路径来更新 package.path.

如果因为某些原因你需要重新加载 模块(例如动态编程), 只要把 package.loaded["DemoLib"] 赋值 nil 就可以了:

...
package.loaded["DemoLib"] = nil
demo = require "DemoLib"
...

我为了给示例创建一个高级而且更简单的接口开始在最近的例程 GLSL Hacker 中使用 Lua模块. Lua 模块 的第一次使用在这篇文章Exploring GLSL – Normal Visualizer with Geometry Shaders (Shader Library)的例程中.

参考

Programming in Lua, 2nd edition, chapter 15

© 著作权归作者所有

共有 人打赏支持
FreeBlues
粉丝 98
博文 280
码字总数 493678
作品 0
其它
程序员
私信 提问
lua中module和require解析

前言 从Lua5.1版本开始,就对模块和包添加了新的支持,可使用require和module来定义和使用模块和包。require用于使用模块,module用于创建模块。简单的说,一个模块就是一个程序库,可以通过...

80后小子
2016/03/10
574
0
(原创)Lua require 、module的一点理解

而鉴于网上针对Lua 模块化开发、包引入机制讲解的太书面语与专业化。所以本文作者从应用出发,通过内置方法为大家讲述运行过程....... 这里假设大家已经对table、全局表的认识。知识点不牢固...

水果糖
2016/09/14
414
0
Openresty最佳案例 | 第7篇: 模块开发、OpenResty连接Redis

转载请标明出处: http://blog.csdn.net/forezp/article/details/78616714 本文出自方志朋的博客 Lua模块开发 在实际的开发过程中,不可能把所有的lua代码写在一个lua文件中,通常的做法将特...

forezp
2017/11/23
0
0
Lua标准库- 模块(Modules)

Lua包库为lua提供简易的加载及创建模块的方法,由require、module方法及package表组成   1、module (name [, ···]) 功能:建立一个模块。   module的处理流程: module(name, cb1, cb2...

jeffjade
2014/12/08
0
0
OpenResty(nginx+lua) 开发入门

OpenResty 官网:http://openresty.org/ OpenResty® - 中文官方站 http://openresty.org/cn/ OpenResty 是一个nginx和它的各种三方模块的一个打包而成的软件平台。最重要的一点是它将lua/l...

English0523
2017/11/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

四、RabbitMQ3.7在CentOS7下的安装

安装依赖 sudo yum install -y gcc gcc-c++ glibc-devel make ncurses-devel openssl-devel autoconf java-1.8.0-openjdk-devel git 创建yum源 vi /etc/yum.repos.d/rabbitmq-erlang.repo [......

XuePeng77
今天
2
0
android 延长Toast的时长

示例:myToast(5000,"hello"); public void myToast(int showTime, String msg) { Toast hello = Toast.makeText(getActivity(), msg, Toast.LENGTH_SHORT); new CountDownTimer(......

雨焰
昨天
4
0
浅谈mybatis的日志适配模式

Java开发中经常用到的日志框架有很多,Log4j、Log4j2、slf4j等等,Mybatis定义了一套统一的日志接口供上层使用,并为上述常用的日志框架提供了相应的适配器。有关适配器模式例子可以参考 设计...

算法之名
昨天
13
0
大数据教程(13.6)sqoop使用教程

上一章节,介绍了sqoop数据迁移工具安装以及简单导入实例的相关知识;本篇博客,博主将继续为小伙伴们分享sqoop的使用。 一、sqoop数据导入 (1)、导入关系表到HIVE ./sqoop import --connect...

em_aaron
昨天
3
0
Git cherry-pick 使用总结

应用背景:假设现在有两个分支:dev_01, dev_02. 如果我想把dev_01分支上的某几个commit合并到dev_02分支, 那么怎么办呢? 这就是cherry-pick的工作了。cherry-pick会捡选某些commit, 即把某...

天王盖地虎626
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部