[erlang-questions] How to avoid copying code?

Daniel Luna luna@REDACTED
Mon Nov 27 15:03:25 CET 2006


On Fri, 24 Nov 2006, attila.rajmund.nohl@REDACTED wrote:
> Hello!
>
> I have a couple of modules (20-30) which define the same macros, like
> this:
> module1.erl:
> -define(FOO, "something1").
> -define(BAR, "else1").
>
> module2.erl:
> -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).

You could place the get_data() function in an included file.

module1.erl:
-include("stuff.hrl").
-define(FOO, "something1").
-define(BAR, "else1").

module2.erl:
-include("stuff.hrl").
-define(FOO, "something2").
-define(BAR, "similar2").

stuff.hrl:
get_data() ->
       {?FOO, ?BAR}.


For more advanced usage of this kind of generic code there are a couple of 
uses in HiPE. See for instance "cfg.inc" and friends. Or 
"hipe_ssa_const_prop.inc". Or take a look at the amd64-backend.

/Luna
-- 
Daniel Luna                           | Top reasons that I have a beard:
luna@REDACTED                     |  a) Laziness.
http://www.update.uu.se/~luna/        |  b) I can.
Don't look at my homepage (it stinks).|  c) I can get away with it.



More information about the erlang-questions mailing list