Ich bin gerade über das folgende Verhalten gestolpert. Zu reproduzieren, erstellen Sie eine Klasse mit einem inst var:Seltsames Verhalten in Squeak Smalltalk Arrays
Object subclass: #Asdf
instanceVariableNames: 'countSeq'
classVariableNames: ''
poolDictionaries: ''
category: 'Asdf'
und eine Lazy-init Getter:
countSeq
^countSeq ifNil: [
countSeq:=#(0) asOrderedCollection.
countSeq at: 1 put: (countSeq at: 1)+1.
countSeq
].
Dies korrekt funktioniert. Wenn ich Asdf new countSeq
rufe, dann gibt es jedes Mal an OrderedCollection(1)
zurück.
Allerdings, wenn ich die entfernen asOrderedCollection
:
countSeq
^countSeq ifNil: [
countSeq:=#(0).
countSeq at: 1 put: (countSeq at: 1)+1.
countSeq
].
Und rufen Asdf new countSeq
mehrere Male, dann bekomme ich #(1)
, #(2)
, #(3)
.... Wie kann das erklärt werden?
(Es scheint mir, wie, als ob dieses Array wie eine C statische lokale Variable verhält In der Tat, ich versuchte es. Das Verfahren und die unglückliche Zähler beginnt bei 1 wieder neu kompilieren)
beide und Tobias Siehe blabla999 die Antworten in der verknüpften Frage –