你如何在Lua本地加载包?

ako*_*e01 2 lua load

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

function print_hi()
   print("hi")
end
Run Code Online (Sandbox Code Playgroud)

我想让函数可用于另一个名为test2.lua的文件,我写道:

require 'test1'
function print_hi_and_bye()
   print_hi()
   print('bye')
end
Run Code Online (Sandbox Code Playgroud)

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

谢谢

bor*_*ges 6

您只需要test1.lua为其请求的人员显示功能.为此,在文件中有一些变化test1.luatest2.lua需要:

test1.lua

local pkg = {}
function pkg.print_hi()
    print("hi")
end
return pkg
Run Code Online (Sandbox Code Playgroud)

test2.lua

local m = require 'test1'
function print_hi_and_bye()
    m.print_hi()
    print('bye')
end
Run Code Online (Sandbox Code Playgroud)

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

在Lua 5.1中,您可以使用模块功能test1.lua以方便使用.

module("test1")

function print_hi()
    print("hi")
end
Run Code Online (Sandbox Code Playgroud)

在Lua 5.2中,该函数被弃用,因为它违反了Lua的设计原则 ; 相反,你应该如第一个例子中所示.