Одним из способов реализации «раннее возвращение» в OCaml это с помощью исключений:Можно ли определить исключение внутри функции
exception Exit
let myfunc() =
try
for i = 0 to .... do
if .. then raise Exit
done; false
with Exit -> true
Однако, есть способ, чтобы объявить это Exit
исключения в теле функция, поэтому его имя не видимо для других функций в модуле?
(* I would like to do this, but it gives a syntax error *)
let myfunc() =
exception Exit
try
for i = 0 to .... do
if .. then raise Exit
done; false
with Exit -> true
Это запах кода. –
Почему вы так думаете? Я думаю, что он более структурирован, чем писать хвостовой рекурсивный цикл. – hugomg
Опираясь на исключения, чтобы вести бизнес-логику, обычно нелепо для меня, хотя я не знаю, для чего вы используете исключение, возможно, это законно, как фатальный для всей программы. –