Monday, August 3, 2009

Module inherittance in Erlang

Erlang support module inheritance via extends module property.

Here is the example code:


-module (parent).
-export( [fun1/0, fun2/0] ).

fun1() ->
io:format( "In parent::fun1/0~n" ).

fun2() ->
io:format( "In parent:fun2/0~n" ).


-module (child).
-export( [fun1/0] ).

fun1() ->
io:format( "In child:fun1/0~n" ).

Testing this:


> c(parent), c(child).
> parent:fun1().
In parent:fun1/0
> parent:fun2().
In parent:fun2/0.
> child:fun1().
In child:fun1/0.
> child:fun2().
In parent:fun2/0

Even though fun2 is not defined/exported in child module, calling child:fun2/0 is a valid call as parent has exported fun2/0 function.

If you call module_info() on child, you won't see fun2 function in the exported function list. Erlang VM find the extended module via attributes property of the module.

No comments:

Book Promotion