Is it possible to create new classes at run time in SC3?
The short answer is "No".James McCartney explains that
"SC's constant time method lookup tables would complicate doing this. It could be done but it would be expensive."
So this feature has been excluded from the language for performance reasons.
Julian Rohrhuber suggested 2 alternatives. The first is using a dictionary, like this:
d = IdentityDictionary.new[ \post -> { arg item; item.post } ]; d.at(\post).value;The other one is the used of the
addUniqueMethod
method9.addUniqueMethod(\ohNo, { \hello }); 9.ohNo;Of course to really add new classes you need to restart the interpreter so that it can recompile the library.
Object prototyping using Environments or Events is becoming more common. Basic notes may be found in the latest svn version of the Environment help file.
e = (a: 1, b: 2, addAB: { |self| self.a + self.b }); e.addAB; // prints 1+2 == 3 e.a = 5; e.addAB; // prints 5+2 == 7
Also see the ddwPrototype quark for a slightly different approach to the same problem.