从用户的角度来看,一个模块能够通过 require 加载并返回一个 table,模块导出的接口都被定义在此 table 中(此 table 被作为一个 namespace)。所有的标准库都是模块。标准库被预先加载了,就像这样:
复制代码 代码如下:
math = require 'math'
string = require 'string'
require 函数
使用 require 函数加载模块能够避免多次重复加载模块。加载一个模块:
复制代码 代码如下:
require 'modulename'
模块名(modulename)不那么准确的来说就是一个文件名(Lua 文件或者是 C 库)。一个模块被加载后会被缓存到 pacakge.loaded[modulename] 中。看一个例子:
复制代码 代码如下:
-- test.lua
print 'Hello World'
在 test.lua 的相同目录下创建 main.lua 文件:
复制代码 代码如下:
-- main.lua
require 'test'
我们可以尝试多次 require test.lua 文件,但最终只会输出一次 Hello World。如果我们希望 require 重新加载模块,那么可以清理 package.loaded:
复制代码 代码如下:
package.loaded[modulename] = nil
范例:
复制代码 代码如下:
require 'test' --> Hello World
package.loaded.test = nil
require 'test' --> Hello World
编写模块
编写一个模块很简单,我们先创建一个 table 然后把需要导出的接口放入 table 中,最后返回此 table:
复制代码 代码如下:
-- test.lua
local exports = {}
function exports.foo()
print 'Hello World'
end
return exports
模块的返回值会被赋值给 package.loaded[modulename]:
复制代码 代码如下:
assert(require 'test' == package.loaded.test)
如果模块不返回值,那么 package.loaded[modulename] 的值将为 true:
复制代码 代码如下:
-- 假定 test.lua 是一个空文件
local t = require 'test'
print(t) --> true
print(package.loaded.test) --> true
更多的编写模块的方法见:http://lua-users.org/wiki/ModulesTutorial
查找模块
如果一个模块使用 Lua 编写,那么将在 package.path 中查找,如果一个模块使用 C 编写,那么将在 package.cpath 中查找。package.path 和 package.cpath 是一个分号分隔的路径列表,例如:
复制代码 代码如下:
C:\bin\lua\lua\"codetitle">复制代码 代码如下:
C:\bin\lua\lua\"codetitle">复制代码 代码如下:
C:\bin\lua\lua\a\b.lua
.\a\b.lua
Lua,入门指南,模块
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?