Нашел в сети два варианта как это сделать:
| Код |
|---|
Функция pcall вызывает функцию f с аргументами, переданными в параметрах и возвращает результат успешности вызова функции. Если функция f была вызвана успешно, то остальные возвращаемые значения pcall являются результатом вызова функции f, иначе второе возвращаемое значение является сообщением об ошибке. Например:
local callResult, result = pcall(dofile, fileName)
if callResult then
-- все в порядке, result это то, что вернула функция dofile
else
-- result это сообщение об ошибке
print(result)
end
Второй способ загрузки файла использует переключение окружения и уже знакомую функцию loadfile:
-- загружаем чанк из файла
local result
local func, errorMsg = loadfile('data2.lua')
if func then
-- создаем таблицу для окружения,
-- в котором будет выполняться функция func
local P = {}
-- устанавливаем окружение для функции func
setfenv(func, P)
-- вызываем функцию func
func()
-- все "глобальные" переменные,
-- объявленные внутри чанка, попадут в таблицу P
result = P.a
else
print(errorMsg)
end |
Но хотелось бы понимать чем они отличаются друг от друга.