Как добавить определение функции в Lua, не требуя загрузки файла? - PullRequest
1 голос
/ 22 декабря 2011

Я использую C Fuzzy API и хочу загрузить функциональный модуль, содержащийся в файле, скажем, mycalculator.lua.Это, кажется, работает нормально, однако, когда я позже пытаюсь запустить другой файл A.lua, который требует 'mycalculator', он не будет работать, пока файл mycalculator.lua не будет доступен в файловой системе для перезагрузки.Я пытаюсь просто загрузить его в систему, а затем сделать его доступным, не имея mycalculator.lua в файловой системе.Есть ли способ заставить lua system сохранить определение, не загружая его снова?По сути, я преобразую mycalculator.lua в строку, а затем запускаю ее.Я не хочу помещать файл mycalculator.lua в файловую систему, я просто хочу передать его как строку, а затем иметь возможность требовать его в следующей строке, которую я передаю в стек. Спасибо

1 Ответ

2 голосов
/ 22 декабря 2011

Существует разница между простым выполнением сценария Lua и загрузкой модуля Lua.Если вы хотите загрузить модуль Lua, то вы должны фактически загрузить модуль Lua точно так же, как это сделал бы скрипт: вызвав require.

Поскольку вы, похоже, не знакомы с Lua, я, вероятно, должен объяснить это.Вы, вероятно, видели такой код в скриптах Lua:

require 'mycalculator'

Это не какое-то специальное утверждение для Lua.Это вызов функции .Это просто синтаксический сахар для:

require('mycalculator')

Функции в Lua можно вызывать с синтаксисом NAME VALUE вместо синтаксиса NAME(...), но он позволяет отправлять только один параметр.И параметр должен быть литералом (или конструктором таблицы).

Чтобы вызвать функцию Lua require из C, вы должны использовать стек Lua.Вы должны извлечь функцию из глобальной таблицы, используя lua_getfield(L, LUA_GLOBALSINDEX, "require"); Затем вы помещаете в стек строку, содержащую имя загружаемого модуля.Затем вы используете lua_pcall или любую функцию вызова функции Lua для ее вызова.

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