Доброго времени суток.
Так сложилось, что сейчас пишу дипломный проект на smalltalk-e. И в
процессе написания новой функциональности, без видимой причины код
перестал корректно работать. В процессе отладки было замечено крайне
странное поведение системы - после инициализации рабочих объектов они
зачастую были в разных состояниях (объекты не работают с вводом/
выводом, нет переменных класса, нет многопоточности, старт в чистом
образе ни на что не влияет). После длительного поиска источника
проблем, путём выкидывания из кода всего, без чего странное поведение
сохраняется осталось примерно следующее:
Object subclass: #MyPoint
instanceVariableNames: 'x y'
classVariableNames: ''
poolDictionaries: ''
category: 'Hetsi-Core-Test'!
= anPoint
^ (self x = anPoint x) & (self y = anPoint y)
" or this code: ^ (self x = anPoint x) and: [self y = anPoint y]"! !
x
^ x! !
x: v
x := v! !
y
^ y! !
y: v
y := v! !
---------------------------------------------------
Object subclass: #MyTest
instanceVariableNames: 'dic'
classVariableNames: ''
poolDictionaries: ''
category: 'Hetsi-Core-Test'!
add: anArray
dic add: (MyPoint new x: (anArray at: 1); y: (anArray at: 2))! !
initialize
dic := Set new! !
size
^ dic size! !
--------------------------------------------------
(1 to: 10) collect: [ :e |
| x |
x := MyTest new.
x add: {#a1. #b1}.
x add: {#a1. #b1}.
x add: {#a2. #b2}.
x add: {#a2. #b2}.
x size.
] #(4 4 4 4 3 4 3 3 4 3)
Последняя часть кода выполняется в ворспейсе, и результат его
выполнения, который меняется от раза к разу. Есть какие-нибудь теории
почему так происходит?
Squeak 4.1 и Pharo 1.0
PS Ошибку исправил, но почему этот код не работает корректно не понял.
--
http://groups.google.ru/group/sugr