私はちょうど次の動作を見つけました。それを再現するには、インストのVARを持つクラスを作成します。Squeak Smalltalkアレイでの不思議な動作
Object subclass: #Asdf
instanceVariableNames: 'countSeq'
classVariableNames: ''
poolDictionaries: ''
category: 'Asdf'
そして怠惰-INITゲッター:これは正しく動作
countSeq
^countSeq ifNil: [
countSeq:=#(0) asOrderedCollection.
countSeq at: 1 put: (countSeq at: 1)+1.
countSeq
].
。私はAsdf new countSeq
と呼ぶと毎回an OrderedCollection(1)
を返します。
私はasOrderedCollection
を削除する場合は、:
countSeq
^countSeq ifNil: [
countSeq:=#(0).
countSeq at: 1 put: (countSeq at: 1)+1.
countSeq
].
そしてAsdf new countSeq
を複数回呼び出し、それから私は... #(1)
、#(2)
、#(3)
を取得します。 これはどのように説明できますか?
(この配列は、C静的ローカル変数のように動作しているかのようにそれはのように私には見えます実際には、私はそれを試してみた:メソッドを再コンパイルし、不幸なカウンタが再び1から始まる)
は、リンクされた質問 –