[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.

-define(FOO, "something1").
-define(BAR, "else1").

-define(FOO, "something2").
-define(BAR, "similar2").

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.

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