loop exit question

Gunilla Hugosson <>
Thu Apr 19 14:27:26 CEST 2001


Klacke wrote:
> 
> On Thu, Apr 19, 2001 at 02:02:43PM +0200, Willem Broekema wrote:
> > If a function should loop forever while remembering some
> > state, most examples I have seen use:
> >
> > loop(State) ->
> >    receive
> >        stop ->
> >            stopped_upon_request;
> >        Other ->
> >            ...,
> >            loop(State)
> >    end.
> >
> > Now, if the State is not changed in any of the 'reveiced'
> > branches, is there a reason not to move the final 'loop()'
> > command to the end, and use 'exit()' for breaking out of
> > the loop, like in the following?
> >
> > loop2(State) ->
> >    receive
> >        stop ->
> >            exit(self(), stopped_upon_request);
> >        Other ->
> >            ...
> >    end,
> >    loop(State).
> >
> >
> 
> No, that's the way to do it.
> 

I disagree. You might be saved the effort of having to type
"loop(State)"  more than once, but you lose readability
and maintainability. I can't count the number of times I have
debugged code behaving strangely and found constructs like this:

loop(State) ->
  stop ->
    exit(stop);
  ...
  Pattern ->
    ...,
    loop(State);
  ...
  Other ->
     ignore
  end,
  loop(State).

/ Gunilla



More information about the erlang-questions mailing list