lua - 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()
解决方案
来自 Lua 5.3 参考手册:
可变参数表达式,用三个点 ('...') 表示,只能在直接在可变参数函数内部使用;它们在第 3.4.11 节中进行了解释。
在运行任何代码之前,lua 会在一个名为 arg 的全局表中收集所有命令行参数。脚本名称转到索引 0,脚本名称后的第一个参数转到索引 1,依此类推。
所以在你的情况下{...}
会导致一个空表。改为使用arg
。
推荐阅读
- maven - 无法在 oracle weblogic 12.1.3 中发布 EAR
- java - 如何通过 Java 使用 Selenium 右键单击链接并在新选项卡中打开链接
- android - 添加 admob 横幅广告时 WebView 不显示
- python - 我该如何克服“ValueError:形状(无,1)和(无,7)不兼容”
- xamarin - Xamarin UI 子布局放置
- bash - 仅当它们小于特定大小时,如何列出所有目录和子目录的路径
- html - 在 CSS 中添加固定大小的卡片
- reactjs - react-datepicker 的月份选择器不起作用
- arrays - 如何返回一个类类型的数组并填充?
- c# - 带有 unsafe 和 extern 的 C++/CLI 和 C#/VB 有什么区别?