2012-01-12 92 views
2

如果我有一个名为test1.lua如何在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的加载设施做到这一点,而不仅仅是通过重构代码?

感谢

回答

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;相反,您应该按照第一个示例中的说明进行操作。

+0

谢谢!这正是我所期待的! – akobre01 2012-01-13 18:58:50