[erlang-questions] How to avoid copying code?

Håkan Stenholm hokan.stenholm@REDACTED
Sat Nov 25 02:42:23 CET 2006

attila.rajmund.nohl@REDACTED wrote:

>I have a couple of modules (20-30) which define the same macros, like
>-define(FOO, "something1").
>-define(BAR, "else1").
>-define(FOO, "something2").
>-define(BAR, "similar2").
>And I also have a function in these modules that return the data of
>these macros:
>get_data() ->
> 	{?FOO, ?BAR}.
>Obviously this function definition is exactly the same in all 20-30
>modules, which I don't really like. Is there a way to define this
>function only once? In Java I'd create an abstract ancestor class for
>module1 and module2, declare the FOO and BAR variables there, also
>implement the get_data() in the ancestor class and assign values to FOO
>and BAR in the constructor of module1 and module2 (there is only one
>instance of module1, etc. classes in the program).
> 				Bye,NAR
One possible way to remove the need for having multiple get_data/0 
functions would be to write something like:

foo() -> "something1".
bar() -> "else1".

foo() -> "something2".
bar() -> "else2".

get_data(Module) ->
    {Module:foo(), Module:bar()}.

You can then call single_get_data_module:get_data/1 with the appropriate 
module, when you need a specific tuple.

More information about the erlang-questions mailing list