加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-14 22:04:51 所属栏目:大数据 来源:网络整理
导读:-- 假设文件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的内容是:?
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这个写的比较明白

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读