LINUX.ORG.RU

Работа с внешними ресурсами в OCaml


0

0

Такой вопрос. Как в OCaml обычно ведется работа с внешними ресурсами?

Например, открыл я сокет. Хочется гарантировать, что в любой ситуации 
(будь то ошибка или нормальное выполнение программы) сокет будет закрыт.
 В Java я для этого использую finally, в C++ - деструкторы, в Scheme 
можно на макросах RAII изобразить. А что делать в OCaml? Вот такой код 
выглядит слегка некузяво:

let sock = [...] in try [...] close sock with _ -> close sock;;

Получается некоторое дублирование. 
★★★★

Насколько я понимаю, аналога finally в OCaml нет. Другое дело, что используя camlp4 его можно сделать. Кстати, в приведенном коде, скорее всего, есть ошибка -- после close sock нужно бы снова выбрасывать исключение -- в противном случае вышестоящие обработчики обломятся.

aa5779
()
Ответ на: комментарий от aa5779

Ага, точно.

А вообще, родная документация по OCaml просто отвратительная. Может, конечно, я не то смотрю...

WFrag ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.