2012-01-12 61 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