Получение «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()

0
Jacob Muirhead 8 Апр 2020 в 17:01
... работает, только если объявлен как параметр функции. Если это отдельный скрипт, используйте arg вместо {...}.
 – 
luther
8 Апр 2020 в 18:25

1 ответ

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

3.4 - Выражения

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

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

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

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

0
Piglet 9 Апр 2020 в 10:25