[cells-devel] How to delay evaluation of defobserver?

Josip Gracin gracin at tel.fer.hr
Thu May 10 09:30:40 UTC 2007


Ken Tilton wrote:
> Depending on the design, you might also consider having a Cell that says 
> "OK, now the model has reached this state", part of which is determined 
> by these other instances coming into existence.

That is what I actually need.  I'm constructing a model with lots of
interdependent instances and I'd like to be able to say, "Ok, I've
created all instances of the model, make it alive."  Isn't this what
to-be used to do?

Here's an example.

I have defined a macro called make-system which lets me create family
trees in convenient way.  It just creates instances and sets appropriate
fm-parent for each instance.  Its lambda list is

      (class-name system-name &rest args)

For example, it converts
      (make-system b777-aircraft :aircraft)
into
      (make-instance 'b777-aircraft :md-name :aircraft).

The &rest 'args' can contain keyword :subsystems which recursively calls
make-system on the rest of the args after that keyword (supplying
:fm-parent in all subsystems).  This all is a substitute for what I've
used to accomplish with "(make-instance parent-class :kids (list ...)"
in cells2.0.

;;=============================================
(make-system b777-aircraft :aircraft
    :subsystems
     (lights :lights
       :subsystems
         (switch :pass-signs-switch)
         (switch :no-smoking-signs-switch)
     (b777-flaps-system :flaps-system
       :subsystems
         (b777-flaps-lever :flaps-lever)
         (flaps-indicator :flaps-indicator)
.....)
;;============================================

So, I instantiate all components of an aircraft in this one place.

Now, suppose I have an observer defined on some slot of class 'switch'
(see above) and that the body of the observer depends on
:flaps-indicator component.  At the moment when switch
:pass-signs-switch is instantiated, flaps-indicator still does not
exist, so when the observer is called, it fails.

As I said in my previous mail, it seems to be the case of "don't do it
then". :-)  The "fix" is to define the observer after the aircraft has
been constructed, so that all its components are available.  OTOH, if I
were able to stop the Cells engine, create instances, and then start the
engine, that's what I'd do instead.

Thanks!




More information about the cells-devel mailing list