Как вы загружаете пакет локально в Lua? - PullRequest
2 голосов
/ 13 января 2012

Если у меня есть файл с именем 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 Ответ

6 голосов
/ 13 января 2012

Вам нужно сделать функции test1.lua видимыми только для тех, кто их запрашивал.Для этого необходимы некоторые изменения в файлах test1.lua и test2.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("test1")

function print_hi()
    print("hi")
end

В Lua 5.2 эта функция устарела, поскольку нарушает принципы проектирования Lua ;вместо этого вы должны сделать, как показано в первом примере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...