我个人非常喜欢使用PHP中的一件事 - @ modifier,它将任何类型的异常/错误转换为null(当它是安全的时候,当然,在我真的不关心处理的情况下任何错误)
问题是 - 我怎样才能在Lua中模仿这种行为?可能有一种方法只能对特制的表格产生类似的效果(使用特殊的表格) - 但似乎很难用所有的__ *东西来做对。
重点在于使其尽可能接近语法糖。 有什么建议吗?
UPD:让我们假设开发人员完全了解所有错误抑制的问题(或开发人员只是为了黑暗皇帝而开启黑暗面来抑制星系中的所有错误%))
答案 0 :(得分:3)
我不熟悉PHP中的@
符号,但我在ruby(... rescue nil
)和java(try{...}catch(Exception e){}
中看到了这种“不抛出错误”行为)。
假设这是你想要的,那与Lua中最相似的东西是pcall
(见PiL 8.1)。
如果“您想要安全的代码”位于名为foo
的函数内,那么foo(bar, baz)
的“安全版”将为pcall(foo, bar, baz)
。
如果你没有一个函数,但是有一堆代码,那么你将不得不使用pcall +一个匿名函数。
pcall(function() <your code here> end)
我警告你,总的来说,正如其他人所说,没有充分理由“抛弃”错误。
如果您这样做,我建议您至少在代码中使用评论或类似内容明确说明:
if not pcall(foo, bar, baz) then
-- Do nothing on error.
end
否则,很容易错过pcall
来电。
答案 1 :(得分:1)
不是这个问题的答案,但我觉得有必要用“最佳答案”回答这个问题。你应该从不使用错误抑制。最糟糕的情况是您在发布区域更改应用程序的error_reporting。最好:处理它们!