有没有模仿php的方法@&引用;lua中的修饰语?

有没有模仿php的方法@&引用;lua中的修饰语?,php,syntax,lua,Php,Syntax,Lua,在PHP中有一件事我个人非常喜欢使用-@modifier,它将任何类型的异常/错误转换为null(当然,在安全的情况下,如果我真的不关心处理任何错误的话) 问题是——我如何在Lua中模仿这种行为?也许有一种方法可以仅在特殊准备的表(使用特殊的元表)上实现类似的效果,但似乎很难在所有的东西上都做到正确 关键是要使它尽可能接近语法上的糖。 有什么建议吗 UPD:假设开发者完全意识到错误抑制的所有问题(或者开发者只是为了黑暗皇帝而打开黑暗面来抑制银河系中的所有错误%)这并不是这个问题的答案,但我觉得有

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

问题是——我如何在Lua中模仿这种行为?也许有一种方法可以仅在特殊准备的表(使用特殊的元表)上实现类似的效果,但似乎很难在所有的东西上都做到正确

关键是要使它尽可能接近语法上的糖。 有什么建议吗


UPD:假设开发者完全意识到错误抑制的所有问题(或者开发者只是为了黑暗皇帝而打开黑暗面来抑制银河系中的所有错误%)

这并不是这个问题的答案,但我觉得有义务用“最佳答案”来回答这个问题。您应该永远不要使用错误抑制。最坏的情况是,在发布区域更改应用程序的错误报告。最好的办法:对付他们

我不熟悉PHP中的
@
符号,但我在ruby(
…rescue nil
)和java(
try{…}catch(异常e){}
)中看到过这种“不要抛出错误”行为

假设这就是您想要的,最类似于Lua的是
pcall
(请参阅)

如果“您希望安全的代码”位于名为
foo
的函数中,那么
foo(bar,baz)
的“安全版本”将是
pcall(foo,bar,baz)

如果您没有函数,但是有一堆代码,那么您将不得不使用pcall+匿名函数

pcall(function() <your code here> end)

否则,就很容易错过那次调用。

@
对于系统、应用程序、程序和逻辑来说,这是开发人员的死亡failure@Shakti:我不同意。这是一种糟糕的风格,但有充分的理由抑制错误。一个是错误对程序流来说不一定是致命的。@IPv6:pcall
pcall
p
在这里代表“protected”。在PHP中,抑制错误实际上是一个相当昂贵的操作,所以不要在性能关键的上下文中使用它。pcall似乎是相关的!所以这个问题可以稍微重写一下:如何将表达式默默地包装到可调用对象中?我只是什么句法糖,再一次。。。在完全不需要正常错误处理的情况下,开发速度/完整性之间总是有平衡的,老实说,Lua在其他领域有更多的缺陷。。。但我喜欢这句话:)问题是如何花更多的时间在真正重要的事情上,跳过繁琐而不需要的步骤在ifs中包装东西,etci意味着有些情况下这些步骤只是浪费时间。不是在任何类型的生产代码中,当然
@
真的不应该在任何PHP程序中使用,永远不要。谢谢!只要更仔细地阅读关于pcall的内容,这就是我真正想要的
if not pcall(foo, bar, baz) then
  -- Do nothing on error. 
end