如何在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的加载工具实现这一点,而不仅仅是通过重构代码?

谢谢

原文链接 https://stackoverflow.com/questions/8842379

点赞
stackoverflow用户563154
stackoverflow用户563154

你需要使 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 中,该函数被弃用了,因为它违反了 Lua 的设计原则;取而代之的是使用第一个示例所示的方式。

2012-01-12 22:02:40