[erlang-questions] Newbie question: avoiding massive 'case' statement

David Mitchell monch1962@REDACTED
Thu Mar 6 08:59:50 CET 2008


Thanks everyone,

I used Ulf's suggestion and it worked like a charm.

Regards

Dave Mitchell

On 06/03/2008, Michael McDaniel <erlangy@REDACTED> wrote:
> maybe something like or a variation of  ...
>
>   TransactionType = "ZABC" ,  %% or however it gets loaded
>   Request = "some appropriate request for TransactionType" ,
>
>   TT = string:to_lower(TransactionType) ,  %% no problem if already lower
>
>
>   erlang:apply( erlang:list_to_atom(TT), process_request, [Request] ) ,
>
>
>   %% and catch the exception from the apply
>
>
>  ~Michael
>
>
>
>  On Thu, Mar 06, 2008 at 07:59:05AM +1100, David Mitchell wrote:
>
> > Hello everyone,
>  >
>  > Newbie alert...
>  >
>  > I've got a block of code that looks like:
>  >
>  > case TransactionType of
>  >   "ZABC" ->
>  >     zabc:process_request(Request);
>  >   "Z123" ->
>  >     z123:process_request(Request);
>  >   "YPQX" ->
>  >     ypqx:process_request(Request);
>  > ...
>  >   TransactionType ->
>  >     error_logger:info_msg("Unknown transaction type")
>  > end
>  >
>  > This is all fine and dandy, but I'm expecting the 'case' statement to
>  > grow to handle several hundred different values of TransactionType
>  > over time.  The code is going to get unwieldy in size, and the
>  > likelihood of mistakes in cut/paste updating of the 'case' block is
>  > going to get pretty high.
>  >
>  > As an alternative to the above, is there a way to do something like
>  >
>  > try
>  >   &&&TransactionType&&&:process_request(Request)
>  > catch
>  >   error_logger:info_msg("Unknown transaction type")
>  > end
>  >
>  > where &&&TransactionType&&&:process_request(...) is some "magic code"
>  > that lets me call the process_request function in the module that has
>  > the name of the value of TransactionType  (hopefully that's clear, if
>  > not necessarily English)?
>  >
>  > Alternately, is there some sort of refactoring I could do to avoid the
>  > massive 'case' statement?
>  >
>  > There may be some obvious solution to do this, but I haven't been able
>  > to find it...
>  >
>  > Thanks in advance
>  >
>  > Dave Mitchell
>
> > _______________________________________________
>  > erlang-questions mailing list
>  > erlang-questions@REDACTED
>  > http://www.erlang.org/mailman/listinfo/erlang-questions
>
>
> --
>  Michael McDaniel
>  Portland, Oregon, USA
>  http://autosys.us
>  +1 503 283 5284
>
> _______________________________________________
>  erlang-questions mailing list
>  erlang-questions@REDACTED
>  http://www.erlang.org/mailman/listinfo/erlang-questions
>



More information about the erlang-questions mailing list