【lua的require、dofile、loadfile、loadstring及luamodule机制】

-- 假设文件mod.lua的内容是: 
local M = {}

local function sayMyName() 
  print('Hrunkner') 
end

function M.sayHello() 
  print('Why hello there') 
  sayMyName() 
end

return M

-- 另一个文件也可以使用mod.lua的函数: 
local mod = require('mod')  -- 运行文件mod.lua.

-- require是包含模块的标准做法。 
-- require等价于:    (针对没有被缓存的情况;参加后面的内容) 
local mod = (function () 
  <contents of mod.lua> 
end)() 
-- mod.lua就好像一个函数体,所以mod.lua的局部变量对外是不可见的。

-- 下面的代码是工作的,因为在mod.lua中mod = M: 
mod.sayHello()  -- Says hello to Hrunkner.

-- 这是错误的;sayMyName只在mod.lua中存在: 
mod.sayMyName()  -- 错误

-- require返回的值会被缓存,所以一个文件只会被运行一次, 
-- 即使它被require了多次。

-- 假设mod2.lua包含代码"print('Hi!')"。 
local a = require('mod2')  -- 打印Hi! 
local b = require('mod2')  -- 不再打印; a=b.

-- dofile与require类似,只是不做缓存: 
dofile('mod2')  --> Hi! 
dofile('mod2')  --> Hi! (再次运行,与require不同)

-- loadfile加载一个lua文件,但是并不允许它。 
f = loadfile('mod2')  -- Calling f() runs mod2.lua.可以调用mod = f()来获取mod2.lua的返回值

-- loadstring是loadfile的字符串版本。 
g = loadstring('print(343)')  --返回一个函数。 
g()  -- 打印343; 在此之前什么也不打印。

读者可以参考:http://www.cnblogs.com/ghost240/archive/2012/06/20/2556054.html


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

module函数,

module "mymodule"

<span style="font-size:18px;">local modname = “mymodule”     – 定义模块名  
local M = {}                               -- 定义用于返回的模块表  
_G[modname] = M                      -- 将模块表加入到全局变量中  
package.loaded[modname] = M    -- 将模块表加入到package.loaded中,防止多次加载  
setfenv(1,M)                               -- 将模块表设置为函数的环境表,这使得模块中的所有操作是以在模块表中的,这样定义函数就直接定义在模块表中  </span>

http://blog.sina.com.cn/s/blog_5f928b640102v5nt.html这个写的比较明白

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值