Lua - как мне использовать одну библиотеку из другой?
У меня проблемы с использованием одной Lua lib из другой. Я не уверен, как лучше это сделать.
У меня есть библиотека, которая возвращает (неглобальную) таблицу с функциями, например:
-- foo.lua
local foo = {}
function foo:m1(...) ... end
function foo:m2(...) ... end
return foo
Эта библиотека может быть вставлена в глобальную или локальную область, в зависимости от того, что хочет пользователь:
-- 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 ответ
Просто позвони require 'foo'
прямо в тебе bar
модуль. Это совершенно законно. foo
модуль будет загружен только один раз. Чтобы не вытечь из bar
модуль, сохраните его в локальной переменной.
Вы также можете использовать эту идиому, чтобы разделить один большой модуль на несколько частей, и чтобы один модуль требовал всех остальных. Пользователь должен будет require
только один модуль.