On Mon, Mar 4, 2019 at 8:26 AM Sven Van Caekenberghe <sven@stfx.eu> wrote:
(1) the basic concepts are clear (and have been for a long time):
- when a class initialize method is loaded, it is executed afterwards, if and only if the source code changed
- there are startUp[:] and shutDown[:] and SessionManager to handle images coming up, saving and going down
With these tools you can build any behaviour you want.
I am not sure we need something else, except maybe more education
(2) the problem is much larger than just the class initialize method, since that can call other methods (like #initializeConstants, etc, ..) - even if the class initialize method did not change, a method further down might have and could require re-initialization.
For this reason I sometimes put a timestamp in a comment of the class initialize method to force re-initialization since I known that I added a new constant somewhere (much) further down.
Complex new features might do more harm than good
+1000. KISS.
On 4 Mar 2019, at 17:13, Ben Coman <btc@openinworld.com> wrote:
On Mon, 4 Mar 2019 at 20:08, Norbert Hartl <norbert@hartl.name> wrote:
Am 04.03.2019 um 03:46 schrieb Ben Coman <btc@openinworld.com>:
In relation to developing sample solutions for an Exercism exercise, the following observation was made about class initialization...
class is initialized on load - and not when you modify it - so this can be very confusing for users
My first thought was to wonder if Quality Assistant could track whether a class initialize method had been run after it was modified, and display alerts.
Alternatively, I wonder if a reasonable pattern would be to couple class-side lazy initialization with a pragma to reset a variable when the method is saved...
MyClass class >> referenceData <onSaveResetVariable: ReferenceData> ^ ReferenceData := ReferenceData ifNil: [ 'reference data' ]
Isnât the usual way to do that to register the class in the shutdown list and implement #shutdown: ?
To me a good minute to work out why I didn't understand you. Sorry, I meant <onMethodSaveResetVariable: ReferenceData>
So when 'reference data' is updated and the modified method is saved, the variable gets lazy initialized *again* with the new definition.
hope that is more clear, cheers -ben
-- _,,,^..^,,,_ best, Eliot