Получение «keycreator: 21: попытка выполнить арифметику на локальном« iLevel »(нулевое значение)» и не может понять/выяснить, почему
local sPrefix = "Class "
local sSufix = " Keycard"
local iLevelLength = 6
local sDiskSide = "right"
local tVarargs = {...}
local iLevel = tVarargs[1]
local sLevel = "4"
if (iLevel == "1") then sLevel = "E" end
if (iLevel == "2") then sLevel = "D" end
if (iLevel == "3") then sLevel = "C" end
if (iLevel == "4") then sLevel = "B" end
if (iLevel == "5") then sLevel = "A" end
local hMKey = fs.open("masterkey.lua", "r")
local hKey = fs.open("disk/key", "w")
local sMKey = hMKey.readAll()
local sWriteKey = string.sub(sMKey, 1, iLevel*iLevelLength)
disk.setLabel(sDiskSide, sPrefix .. sLevel .. sSufix)
hKey.write(sWriteKey)
hMKey.close()
hKey.close()
1 ответ
Из справочного руководства Lua 5.3:
Выражения vararg, обозначаемые тремя точками ('...'), могут использоваться только непосредственно внутри функции vararg; они объясняются в §3.4.11.
Перед запуском любого кода lua собирает все аргументы командной строки в глобальную таблицу с именем arg. Имя сценария переходит в индекс 0, первый аргумент после имени сценария переходит в индекс 1 и так далее.
Итак, в вашем случае {...}
приводит к пустой таблице. Вместо этого используйте arg
.
Похожие вопросы
Новые вопросы
lua
Lua - мощный, быстрый, легкий, встраиваемый язык сценариев. Он динамически типизирован, выполняется путем интерпретации байт-кода и имеет автоматическую сборку мусора. Его скорость - одна из главных причин, по которой он широко используется сообществом машинного обучения. Его часто называют «расширяемым языком расширения».
...
работает, только если объявлен как параметр функции. Если это отдельный скрипт, используйтеarg
вместо{...}
.