Тут я что-то подумал.
Если бы писал нечто подобное (мечты! мечты!), то, будучи насквозь императивщиком, я бы, наверное, проделал следующую эволюцию:
Сначала напишем через кучу case'ов (как в
исходном сообщенииАвтор:
Дата: 17.09.06
):
start(Driver) ->
case Driver of
mysql ->
% совершаем коннект
{};
mnesia ->
% совершаем коннект
{};
odbc ->
% совершаем коннект
{}
end.
После чего я бы почесал репу, увидев, что процедура подсрединения к каждому драйверу довольно длинная, и переписал бы:
start(Driver) when Driver == mysql ->
% совершаем коннект
{};
start(Driver) when Driver == mnesia ->
% совершаем коннект
{};
start(Driver) when Driver == odbc ->
% совершаем коннект
{}.
А потом кто-нибудь (на RSDN или в erlang-questions) показал бы мне (а может, я и сам бы догадался —
), что все это дело можно еще сократить:
start(mysql) ->
% совершаем коннект
{};
start(mnesia) ->
% совершаем коннект
{};
start(odbc) ->
% совершаем коннект
{};
Следующим шагом было бы добавление Options, и, собственно, приход к результату:
start(Driver) ->
start(Driver, []).
start(mysql, Options) ->
% совершаем коннект
{};
start(_, _) ->
{error, driver_not_supported}.
Я уже говорил, что Эрланг рулит?
Кстати. Примерно такую же процедуру я прошел в своем
http://orcas.googlecode.com/svn/trunk/src/test.erl для функции tagStart
... << RSDN@Home 1.2.0 alpha rev. 655>>