[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