Is it possible to extend an individual object in Smalltalk

后端 未结 6 1614
灰色年华
灰色年华 2020-12-16 01:28

I\'m doing research in Smalltalk reflection, and I was wondering if it was possible to extend an individual object like that would be possible for instance in Ruby. With thi

6条回答
  •  半阙折子戏
    2020-12-16 02:21

    In Smalltalk there is no built in way of doing instance-specific behavior in that way. Smalltalk adheres to the principle that each object belongs to a class and its behavior and state shape depends on the class. That is why you can easily change the class (add inst vars, compile new methods, etc), but that means changing the behavior to all of its instances. There are, however, different approaches (according to the Smalltalk flavor) for achieving instance-specific behavior, such as Lightweight Classes, where the idea is to create a special (lightweight) class for a particular instance and replace the original class with the custom one. As a result you have a special class for each "special" instance. AFAIK in Digitalk St the dispatching mechanism is a bit more flexible and allows to easily implement instance-based behavior (see 4th link). I'll leave here some links that you may find useful:

    • Reflective Facilities in Smalltalk-80
    • Class Warfare: Classes vs. Prototypes
    • Smalltalk Daily 6/4/09: Instance Specific Behavior
    • Instance-Specific Behavior for the Working Smalltalker
    • Evaluating message passing control techniques in Smalltalk

    HTH

    Edit: the link posted by Hernan ("Debugging Objects" by Hinkle, Jones & Johnson) is the one to which I was referring and that couldn't find.

提交回复
热议问题