Lua - как мне использовать одну библиотеку из другой? - PullRequest
1 голос
/ 29 октября 2011

У меня проблемы с использованием одной библиотеки Lua из другой.Я не уверен, как лучше это сделать.

У меня есть библиотека, которая возвращает (не глобальную) таблицу с функциями, например:

-- foo.lua
local foo = {}
function foo:m1(...) ... end
function foo:m2(...) ... end
return foo

ThisБиблиотека может быть вставлена ​​в глобальную или локальную область, в зависимости от того, что хочет пользователь:

-- globally
foo = require('foo')
-- or locally
local foo = require('foo')

Я сейчас пытаюсь создать другую библиотеку (назовем ее bar), которая требует / использует этоfoo lib.Примерно так:

-- bar.lua
local bar={}
function bar:m3(...)
  ...
  foo:m1()
  ...
end

Моя проблема в том, что я не знаю, как "передать" foo на bar.

В идеале я хотел бы отправить его какпараметр для require:

local foo = require('foo')
local bar = require('bar', foo)

Но я не думаю, что это возможно (правда?).Другим вариантом, о котором я мог подумать, было добавление init метода к bar:

local foo = require('foo')
local bar = require('bar')
bar:init(foo)

Это работает, но мне не кажется чистым;можно забыть добавить третью строку, оставив bar в «небезопасном» состоянии.

Есть ли какой-то общий метод / метод Lua, который я пропускаю?

1 Ответ

6 голосов
/ 29 октября 2011

Просто позвоните require 'foo' прямо в ваш bar модуль.Это совершенно законно.Модуль foo будет загружен только один раз.Чтобы не вытекать из модуля bar, сохраните его в локальной переменной.

Вы можете использовать эту идиому также для разделения одного большого модуля на несколько частей, и для одного модуля требуются все остальные,Пользователь должен будет require только один модуль.

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