lua module

来源:互联网 发布:淘宝店铺网红 编辑:程序博客网 时间:2024/05/21 12:42

2.module方法的使用

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. module (“moduleA”)   

相当于执行了以下

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. local name = “moduleA”        
  2. local M = {}                               
  3. _G[name] = M                        
  4. package.loaded[modname] = M      
  5. setfenv(1,M)                                

3.关于module( ... , package.seeall)

        一般在一个Lua文件内以module函数开始定义一个包。module同时定义了一
个新的包的函数环境,以使在此包中定义的全局变量都在这个环境中,而非
使用包的函数的环境中。理解这一点非常关键。 “module(..., package.seeall)”
的意思是定义一个包,包的名字与定义包的文件的名字相同,并且在包的函数
环境里可以访问使用包的函数环境。
使用方式
        一般用require函数来导入一个包,要导入的包必须被置于包路径(package
path)上。包路径可以通过package.path或者环境变量来设定。一般来说,
当前工作路径总是在包路径中。

       例如 文件 a.lua

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. module (..., package.seeall)  
  2. t = {}  
  3. function f()  
  4.  --todo  
  5. end  
         文件 main.lua

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. require "a"  
调用脚本a中的任何全局变量或者函数必须加上a.

实现在不同的lua文件中可以用相同的名称定义变量或者函数

-----------------------------------------------------------------------------------------------

注意,前面的几行代码都没了,只留下了一个module函数的调用。

module函数的调用已经相当于之前的那些代码了。

而package.seeall参数的作用就是让原来的_G依然生效,相当于调用了:setmetatable(M, {__index = _G});
 
再次留意一下,代码末尾的return M也不见了,因为module函数的存在,已经不需要我们主动去返回这个模块的table了。

0 0
原创粉丝点击