有没有办法在Lua中模拟PHP的“@”修改器?

有一件事在 PHP 中我个人非常喜欢使用- @ 修改器,在安全的情况下将任何类型的异常/错误转换为 null(当然,在我真正不关心处理任何错误的情况下)。

问题是-如何在 Lua 中模仿这种行为?也许有一种方法可以在特别准备好的表上模拟类似的效果(使用特殊的元表),但是似乎很难使用所有__*内容正确。

重点在于使其尽可能接近语法糖。有什么建议吗?

UPD:假设开发人员完全了解错误抑制的所有问题(或者开发人员只是为了黑暗皇帝的缘故,在星系中压制了所有错误)。

原文链接 https://stackoverflow.com/questions/5789670

点赞
stackoverflow用户703808
stackoverflow用户703808

并不是对这个问题的真正回答,但我觉得有必要用“最佳答案”来回答这个问题。你永远不应该使用错误抑制。最坏的情况是你会在发布区域改变你的应用程序的错误报告。最好的办法是:处理它们!

2011-04-26 11:36:28
stackoverflow用户312586
stackoverflow用户312586

我对 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 调用。

2011-04-27 13:36:15