Extending Functionality: gen_server_ext

Chris Pressey cpressey@REDACTED
Fri Mar 21 20:04:18 CET 2003


On Fri, 21 Mar 2003 11:22:01 +0100
"Vlad Dumitrescu (EAW)" <Vlad.Dumitrescu@REDACTED> wrote:

> Hello,
> 
> > From: Jay Nelson [mailto:jay@REDACTED]  
> >Chris and Vlad discussed:
> >> Extensions to gen_server to support "behavers" and pseudo
> >> inheritance call chains ...

(aside: just to clarify: "behaver" is not a new thing, it's a coined term
for "a module which implements a behaviour"... which Erlangers write every
day, but don't seem to have a non-specific word for - they tend to use
the name of the specific behaviour that they're implementing as in "I've
written a gen_server" rather than "I've written a behaver for
gen_server")

> [...]
> What I'd like to be able to do is create a process by specifying
> several interfaces/behaviours it will support, a GUI related example
> might be for a button: I need let's say 'drawable', 'clickable',
> 'mouse_over'. Just by naming them, I get the functionality,

  -module(my_button).

  -behaviour(drawable).
  -behaviour(clickable).
  -behaviour(mouse_over).

?

> and I can
> (if I want) to override some of the functionality to better suit the
> button's needs.

  before_draw(Button) ->
    % arbitrarily don't draw the button if it's on the right side
    case x(Button) of
      X when X > screen_width() / 2 ->
        cancel;
      _ ->
        ok
    end.

?

> Potential problem: how to ensure that these behaviours do not have
> overlapping interfaces? (i.e. message tags or callback names that are
> the same)

Prepend a tag?

-Chris



More information about the erlang-questions mailing list