Actually I wanted to have many different object instances with different behaviours picked at random from a list of available behaviours, but didn't find practical to create a class for each different method implementation and delegating to it, since there are many, possibly unlimited valid behaviours.
So maybe changing method implementation at runtime is not what I want because the method implementation will be shared among all instances. What I had in mind was a functionality similar to prototyped languages like Self and Javascript in which you could change the behaviour inside the object and not the class/prototype. 2016-07-23 7:35 GMT-03:00 Norbert Hartl <norb...@hartl.name>: > Can you elaborate on the reason why want to modify behaviour? And how you > would like it to happen? > If the code you want to modify is your own code than you can solve that > most of time with the things you already have. Your example using a block > might be altered to be a strategy pattern. That means you keep one ore more > instance variables for strategy objects. Then you delegate parts of your > behaviour to those objects. You can based on context exchange those objects > to adjust behaviour. > If it is not feasible to change the internal state of an object but you > know all possible variants you can implement all variations as methods in > the object. The right method can be invoked by doing a double dispatch with > another object providing contextual information. > There are plenty of possibilities so you need to know what is the context > that is responsible for switching behaviour and the requirements of the > behaviour modifications. Can you alter the object? Is the number of > modifications a fixed number? Does the modification need to be thread safe? > > Norbert > > > Am 23.07.2016 um 00:41 schrieb Eric Velten de Melo <ericvm...@gmail.com > >: > > > > Hello, > > > > One thing I try to do often is changing the behaviour of a method > dynamically at runtime. The current way I do this is by having a block as > an instance variable and having the method call this block, but I find this > approach a bit cumbersome. Is there some other way or is this the > recommended approach? > > > > I mean, I suppose methods could be changed dynamically by means of > reflection somehow, but is this an easy or recommended way of programming > in Smalltalk? Should slots make things easier? > > > > Eric > > >