所以这里是我写的一些代码:
local fileFunc = {createFolder, openObj, deleteObj, createTxt, theMenu}
setmetatable(fileFunc, mt)
function fileSys()
local fileAction, code
print("The File System")
print("You are currently at "..current_window)
while true do
print("1 Create a new Folder\n2 Open an object\n3 Delete an Object\n4 Create a new text file\n5 Other options")
fileAction = userInInt()
code = fileFunc[fileAction]()
if code > 3 then invRet("fileSys()", code) end
if code == 1 then return 0
else return code end
end
end
我认为通过使用__index
元方法,没有错误,但它仍然会引发attempt to call field ?
错误。我猜测它仍然会引发错误,所以有没有办法可以使用pcall()
mt
看起来像这样:
local mt = { __index = invalid }
无效:
function invalid()
print("Invalid operand, please try again.")
end
仅当用户输入表中未列出的操作数(input > #fileFunc
)时才会抛出此错误
答案 0 :(得分:3)
invalid
不会返回任何内容,但它也不会停止该程序。如果您尝试从不返回任何内容的函数中获取结果,则会得到nil
。
这样做fileFunc[fileAction]
将打印"Invalid operand, please try again."
,但程序将继续运行,索引的结果将为nil
。
不是使用__index
设置metatable并抛出并捕获错误,只需检查nil
就更简单了:
if not fileFunc[fileAction] then
print("Invalid operand, please try again.")
else
local result = fileFunc[fileAction]()
-- Do something
end