Erlang support module inheritance via extends module property.
Here is the example code:
parent.erl
-------------
-module (parent).
-export( [fun1/0, fun2/0] ).
fun1() ->
io:format( "In parent::fun1/0~n" ).
fun2() ->
io:format( "In parent:fun2/0~n" ).
child.erl
----------
-module (child).
-extends(parent).
-export( [fun1/0] ).
fun1() ->
io:format( "In child:fun1/0~n" ).
Testing this:
erl
> c(parent), c(child).
{ok,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:
Post a Comment