如何创建一个 Lua 模块
如何创建一个 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
现在在 Lua 的 main 代码中, 我们可以加载这个 模块, 并且开始通过下面的代码来使用它:
-- 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
如何创建一个 Lua 模块的更多相关文章
- ASP.NET Core模块化前后端分离快速开发框架介绍之2、快速创建一个业务模块
源码地址 GitHub:https://github.com/iamoldli/NetModular 演示地址 地址:https://nm.iamoldli.com 账户:admin 密码:admin ...
- python实例1:创建一个登陆模块
实现功能: 1.用户输入账户密码 2.验证账户是否存在于黑名单,如果存在于黑名单,则执行1,否则往下执行 3.验证用户名和密码. 3.1.如果验证成功,则打印欢迎信息并退出程序: 3.2.如果用户名存 ...
- 使用openresty + lua 搭建api 网关(一)安装openresty ,并添加lua模块
openresty 有点不多说,网上各种介绍,先安装吧. 官方操作在此,http://openresty.org/cn/installation.html, tar -xzvf openresty-V ...
- Nginx使用Lua模块实现WAF
前言:最近一段时间在写加密数据功能,对安全相关知识还是缺少积累,无意间接触到了WAF相关知识,刚好Nginx可以实现WAF功能,也简单学习了Lua这门语言,分享下 一.WAF产生的背景 过去企业通常会 ...
- 1.3、Android Studio创建一个Android Library
一个Android Library结构上与Android app模块相同.它可以包含构建一个app需要的所有东西,包括圆满,资源文件和AndroidManifest.xml.然而,并非编译成运行在设备 ...
- Lua模块的加载与内存释放
今天早上听说一件事情让我觉得很诡异的事情:公司线上的一款游戏,加载一份配置资源后,内存涨了几十M,然后内存再也下不来了.因为好奇,所以要来了最大的一个配置文件(4.5M,去除空格与换行后的大小),进行 ...
- 使用idea创建maven多模块项目
前言 参看:http://blog.csdn.net/zht666/article/details/19040733 使用Maven管理项目时,往往需要创建多个模块,模块之间存在相互引用的关系.对于M ...
- 使用IntelliJ IDEA创建Maven多模块项目
转载:http://blog.csdn.net/xyw591238/article/details/52794788 使用Maven管理项目时,往往需要创建多个模块,模块之间存在相互引用的关系.对于M ...
- npm学习(六)之如何创建 Node.js 模块
如何创建 Node.js 模块 Node.js 模块是一种可以发布到 npm 的包.当你创建一个新模块时,创建 package.json 文件是第一步. 你可以使用 npm init 命令创建 pac ...
随机推荐
- 论文《Network in Network》笔记
论文:Lin M, Chen Q, Yan S. Network In Network[J]. Computer Science, 2013. 参考:关于CNN中1×1卷积核和Network in N ...
- springboot maven
更多信息请从官网获取https://docs.spring.io/spring-boot/docs/2.0.1.RELEASE 1.parent基于自己项目而非spring-boot-starter- ...
- 网桥 以及 IEEE802.1D 生成树协议
(一)网桥 网桥是一个layer 2设备,能够连接两个不同的网段. 如图
- 程序开发入门工具之CodeBlocks
程序开发基础工具之CodeBlocks 作为程序开发工作者,我们会接触很多的程序开发软件:但实用以及容易掌握的程序开发软件对于初学者的学习能力是有一定的加成的.今天我就作为一个程序开发者给大家推荐一个 ...
- Keil C51与Keil ARM共存
转自:http://blog.chinaunix.net/uid-20734916-id-3988537.html Keil和MDK共存,按照以下步骤:1 先安装 Keil C51,安装目录改为:&q ...
- 在Delphi中获得唯一32位长字符串
function GetGUID: string; var vGUID: TGUID; vTemp:string; begin if S_OK = CreateGuid(vGUID) th ...
- VNC Server (CentOS 7 GNOME)
1. 安装VNC服务 sudo yum install tigervnc-server -y 2. 启动VNC服务,设置密码,然后停止 vncserver :1 vncserver -kill :1 ...
- 解决多进程中APScheduler重复运行的问题
转自:http://blog.csdn.net/raptor/article/details/69218271 问题 在一个Python web应用中需要定时执行一些任务,所以用了APSchedule ...
- Java的StringBuIlder扩容机制
JDK 1.6中,扩容的源码是这样: void expandCapacity(int minimumCapacity) { int newCapacity = (value.length + 1) * ...
- Netty基础系列(3) --彻底理解NIO
前言 上一节中我们提到了同步异步与阻塞非阻塞的区别,知道了同步并不等于阻塞.而本节的主角NIO是一种同步非阻塞的I/O模型,并且是I/O多路复用模型.NIO在java中被称为 New I/O.它并不能 ...