Как смоделировать "попробуй наконец" или "попробуй", кроме языков, в которых их нет

Есть ли способ симулировать try-finally или же try-except на языке, который не имеет их?

Если есть какое-то случайное, непредсказуемое, исключение, я должен быть уверен, что какая-то очистка выполняется.

я мог бы попытаться быть уверенным в том, что исключений нет, таким образом, я уверен, что мой код очистки всегда выполняется - но тогда мне не понадобится try-finally/except,

Прямо сейчас я пытаюсь создать try-finally в Луа; но я думаю, что любое решение будет работать и на других языках.

Хотя, на всю жизнь, я не могу понять, как можно обработать исключение без сантехники, предоставляемой языковой инфраструктурой.

Но никогда не больно спрашивать.

4 ответа

Решение

У Lua уже есть необходимые механизмы, чтобы делать что-то, что не совсем так, как исключения. а именно pcall,

Ты можешь использовать pcall выполнить любую функцию Lua. Если эта функция (или любая функция, которую она вызывает) вызывает error (assert звонки error если условие утверждения не верно), то управление потоком вернется на сайт pcall заявление. pcall вернет false и сообщение об ошибке (что передается error).

При этом вы можете "выбросить" ошибки и "поймать" их. Ваша "попытка" это просто pcall; Ваше заявление "ловить" - это то, что pcall результат.

Также помните: Lua - это среда для сбора мусора. Вам не нужно делать какую-либо уборку. Или, если вы это сделаете, вам нужно изменить то, что требует модуль Lua. API Lua должны быть API Lua, а не API C или C++.

Никогда не программируется в lua (это то, что вы пометили как). Однако на нескольких веб-страницах, включая эту, http://jessewarden.com/2011/01/lua-for-actionscript-developers.html упоминалось, что защищенный вызов (pcall) является устройством обработки ошибок lua.

Надеюсь это поможет.

Как насчет этой системы обработки исключений Lua? Вы также можете использовать механизмы Lua RAII.

В общем, исключения могут быть перехвачены с помощью функции signal(). Не уверен, что Луа поддержит такое. В C это то, что вы бы использовали. И это большое раздражение! (несколько сложно.)

Другие вопросы по тегам