分享

Lua Module

 quasiceo 2014-02-04

Lua Module

跳转至: 导航搜索

简介

Lua 模块

模块做了什么

  • module代表了访问的入口
module("lib.socket_moe.get")
  • module的名称应该是从主层访问的时候全部的路径。
  • 默认的情况下它的变量都是局部的,不会污染全局。

发现

  • 在模块里local的函数必须在执行函数的前面,否则可能找不到

困扰

  • Module的Local意味着什么?
  • module指令之前还是之后决定了这个呢?
  • 看起来这样就见到了全局的变量,散发出去了,那么是外面看到里面?还是里面看到外面呢?
module (...,package.seeall)

模块的命名

  • 直接以name命名
    module "name"
  • 直接用文件名引用,而不必每次修改,缺点代价是,无法直接运行模块,必须引用,否则出现未给定值。
    module(...)
    • 注意这里是不定参数的...不是字符串"...",不然你会遇到错误的:
lua: .\lib\qqlib.lua:216: attempt to index upvalue 'json_moe' (a boolean value)
stack traceback:
	.\lib\qqlib.lua:216: in function <.\lib\qqlib.lua:204>
	(tail call): ?
	(tail call): ?
	.\lib\webqq.lua:230: in function 'Start_Moe'
	Moe.lua:260: in main chunk
	[C]: ?
>Exit code: 1

模块的执行

主模块调用子模块后,将子模块的函数载入内存,而子模块如果有执行的语句,也会在require的时候执行一次,只是一次。

module(...,package.seeall)
 
function seta()
	a.b=12
	--print (a.b)
end
 
-- 库的执行首次信息
print "子模块被载入了"
print (os.date())

模块变量的局部性

主模块可以让调用模块看到(package.seeall),调用模块也可以修改主模块数据.

子模块就是为了封装,让主模块控制子模块.

测试

load.lua

b=require("b")
 
a={}
b.seta()
print (a.b) -- 可以访问模块变量

b.lua:

module(...,package.seeall)
 
function seta()
	a.b=12
end

运行load.lua,会得到的是12

见识

自定义包的路径[1]

--将自定义包路径加入package的搜索路径中。也可以加到环境变量LUA_PATH中  
local p = "自定义包路径的父目录"  
local m_package_path = package.path  
package.path = string.format("%s;%s?.lua;%s?/init.lua",  
    m_package_path, p, p)

Program in Lua

-->-->

JustCapIt0787.jpg<br\> JustCapIt0788.jpg<br\>

<--<---

引用信息

以下是[Lua Module]所有用到的引用信息,向这些伟大的家伙致敬:
  1. 跳转 ^ http://blog.csdn.net/hong201/article/details/4163378

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多