Корректны ли зависимости требований в C.lua? Это можно сделать или это круговая?
Просто чтобы немного расширить ответ Джона. Когда вы require
модуль в lua, он сначала проверяет, загружен ли уже этот модуль. Круговая зависимость здесь не является проблемой, потому что, если модуль «A» загружает mycalculator
сначала, а модуль «B» требует этого после, виртуальная машина lua не будет перезагружать mycalculator
снова.
К вашему сведению, lua отслеживает, какие модули загружены через таблицу package.loaded
. Когда новый модуль загружен, эта таблица обновляется новой записью с модулем в качестве имени записи. Модули, которые еще не загружены, не будут иметь записи в package.loaded
, поэтому его значение будет равно нулю.
Еще одна тонкая вещь в вашем коде, которую Джон исправляет:
-- A.lua
require 'mycalculator'
a=1;
b=2;
n=20;
-- ...
-- B.lua
require 'mycalculator'
a=1;
b=2;
x=50;
-- ...
Эти переменные являются глобальными по умолчанию. Когда вам требуются модули «A» и «B», эти переменные будут выгружены в глобальное пространство имен вашего модуля «C», которое может оказаться не тем, что вы хотите. Чтобы лучше разделить это и сохранить его в области видимости файла, просто поставьте перед этими переменными префикс «local», как показано в примере Джона.