Есть ли способ имитировать модификатор php "@" в lua? - PullRequest
0 голосов
/ 26 апреля 2011

В PHP есть одна вещь, которую мне лично очень нравится использовать - модификатор @, который преобразует любые типы исключений / ошибок после него в ноль (когда это безопасно, конечно, в случаях, когда я действительно не беспокоюсь об обработке).любые ошибки вообще)

Вопрос - как я могу имитировать такое поведение в Lua?Может быть, есть способ добиться подобного эффекта только на специально подготовленных столах (со специальным метатабельным) - но, кажется, трудно сделать это правильно со всеми __ * вещами.

Смысл в том, чтобы сделать его максимально приближенным к синтаксическому сахару.Любые предложения?

UPD: допустим, разработчик полностью осведомлен обо всех ошибках подавления ошибок (или разработчик только что перешел на темную сторону, подавляя все ошибки в галактике ради темного императора%))

Ответы [ 2 ]

3 голосов
/ 27 апреля 2011

Я не знаком с нотацией @ в 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 голос
/ 26 апреля 2011

Не совсем ответ на этот вопрос, но я чувствую себя обязанным ответить на этот вопрос «лучшим ответом».Вы должны никогда использовать подавление ошибок.В худшем случае вы изменяете error_reporting вашего приложения в области публикации.Лучше всего: справиться с ними!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...