首页 > 解决方案 > keycreator:21: 尝试在本地 'iLevel' 上执行算术运算(一个 nil 值)

问题描述

获取“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()

标签: luanull

解决方案


来自 Lua 5.3 参考手册:

3.4 - 表达式

可变参数表达式,用三个点 ('...') 表示,只能在直接在可变参数函数内部使用;它们在第 3.4.11 节中进行了解释。

7 - Lua 独立:

在运行任何代码之前,lua 会在一个名为 arg 的全局表中收集所有命令行参数。脚本名称转到索引 0,脚本名称后的第一个参数转到索引 1,依此类推。

所以在你的情况下{...}会导致一个空表。改为使用arg


推荐阅读