你如何在Lua本地加载包?

时间:2012-01-12 21:13:50

标签: load lua

如果我有一个名为test1.lua的文件

function print_hi()
   print("hi")
end

我希望将该函数用于另一个名为test2.lua的文件,我写道:

require 'test1'
function print_hi_and_bye()
   print_hi()
   print('bye')
end

但是,现在让我说我有一个名为test3.lua的第三个函数,我想要公开print_hi_and_bye()但不是print_hi()。如果我需要'test2',我将可以访问print_hi和print_hi_and_bye()函数。我如何绕过这个并将test1的本地函数保存到test2,以便其他任何东西都不会错误地使用它们?有没有办法用lua的加载工具来做这个,而不仅仅是通过重构代码?

由于

1 个答案:

答案 0 :(得分:6)

您需要使test1.lua个功能仅对请求它的人可见。为此,需要对文件test1.luatest2.lua进行一些更改:

<强> test1.lua

local pkg = {}
function pkg.print_hi()
    print("hi")
end
return pkg

<强> test2.lua

local m = require 'test1'
function print_hi_and_bye()
    m.print_hi()
    print('bye')
end

更改很少,现在您只能在您请求的文件中使用这些功能。

在Lua 5.1中,为方便起见,您可以使用test1.lua中的module功能。

module("test1")

function print_hi()
    print("hi")
end

在Lua 5.2中,此函数已弃用violated the design principles of Lua;相反,你应该如第一个例子所示。