包装异常代码

时间:2017-04-06 21:04:00

标签: lua lua-table

有没有办法在try / catch块中包装赋值表达式。

Window = {}
Window.mt = {}
Window.mt.__newindex =function(t,k,v)
         if k=="x" or k=="y" then error("Readonly field", 2) end
         t[k]=v
end
--w is a window 'type'
--try/catch this assignment
w.x = 50

感谢 EM

2 个答案:

答案 0 :(得分:2)

Lua没有try / catch块,但是提供pcall函数接受函数作为其参数(以及可选参数)并捕获/报告该函数中的运行时错误。

所以,你可能有类似if not pcall(function() w.x = 50 end) then ... end的东西(假设错误是以你预期的方式触发的)。

答案 1 :(得分:0)

我这样想:

local w = Window.new{height=150, Area=54}     
function setValues(win)                          
  --force an error                               
  win.x = 50                                     
end                                     

local status, err = pcall(setValues, w)
if err then
   print('Error',err)
else
   print('No errors')
end