[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Accessor names for flavor instance variables
Date: Fri, 2 Jun 89 07:24:09 mdt
From: intvax!drstrip@unmvax.cs.unm.edu
Consider the following two (trivial) flavors:
(defflavor f
(a b c)
()
:readable-instance-variables)
(defflavor g
(d)
(f))
I would like the accessor functions for the instance
variables of g to be g-a, g-b, ... Unfortunately, it seems
that the accessor function name is based on the accessor
name of the mixin.
There doesn't seem to be a way to get what you want automatically. The
assumption in this design is that anyone trying to access the slots A,
B, or C is thinking of the object as an F, not as a G. This is part of
the modularity of Flavors; G-specific interfaces should be independent
of the internal structure of its components. Suppose you were to
redesign F, and get rid of its instance variable C. You would then look
for all the callers of F-C and fix them, or you would define a method
F-C that computes the value. But if you got methods defined in the
dependent flavors, too, then you'd have to fix all the callers of those,
too.
If you really want G-A, G-B, etc., for the sake of modularity, I
suggest you do:
(defmethod (g-a g) ()
(f-a self))
...
You can also define them as:
(defmethod (g-a g) ()
a)
although in this case you should put a :REQUIRED-INSTANCE-VARIABLES
clause in G's defflavor.
barmar