keycreator: 21: попытка выполнить арифметику c на локальном iLevel (нулевое значение) - PullRequest
0 голосов
/ 08 апреля 2020

Получение "keycreator: 21: попытка выполнить арифметику c на локальном iLevel '(значение nil)" и не может понять / выяснить, почему

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 Ответ

0 голосов
/ 09 апреля 2020

Из Справочного руководства Lua 5.3:

3.4 - Выражения

Выражения Варарга, обозначаемые тремя точками ('...') , может использоваться только когда непосредственно внутри функции vararg; они объяснены в §3.4.11.

7 - Lua Автономно:

Перед запуском любого кода lua собирает все аргументы командной строки в глобальной таблице с именем arg. Имя сценария указывается в индексе 0, первый аргумент после имени сценария - в индексе 1. И т. Д.

Так что в вашем случае {...} приводит к пустой таблице. Вместо этого используйте arg.

...