Уф... У меня прелом мозга...
-- а как или почему должен изменятся anObject? Я хотел n-ое кол-во anObject с разным someVariable... Вообще есть какие-то пути как исследовать то что происходит внутри блока? А то сейчас блок для меня как чёрный ящик. Вижу только результат и могу только строить предположения от чего он получился. пятница, 11 октября 2013 г., 23:02:17 UTC+4 пользователь Denis Kudriashov написал:
-- http://groups.google.ru/group/sugr --- Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group. Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email]. Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out. |
Самый главный инструмент - это отладчик. Но главный принцип, который нужно понять: в смолтолке нет магии, все работает через посылку сообщения. Любые переменные (имена классов тоже) являются просто "синонимами" (именами известными компилятору) обычных объектов, с которыми вы можете общаться через посылку сообщения. Не имеет значения, где вы используете переменные, нигде никакой магии не будет, в блоке переменная не будет скопирована сама по себе. Все что происходит, происходит только в ответ на сообщение, и реализацию обработки любого сообщения вы всегда можете посмотреть через стандартные инструменты
11 октября 2013 г., 23:25 пользователь Genosse Alex <[hidden email]> написал:
-- http://groups.google.ru/group/sugr --- Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group. Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email]. Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out. |
In reply to this post by Genosse
Чтобы поставить брекпойнт - хоть внутри блока, хоть в любом другом месте - вставьте туда self break. Когда код дойдёт до этого места, откроется отладчик. Я хотел n-ое кол-во anObject с разным someVariable... Для того, чтобы получить, скажем, десять разных объектов, эти десять объектов надо где-то создать, так? Какое место вашего кода, по вашей мысли, должно создавать новые объекты?
11 октября 2013 г., 23:25 пользователь Genosse Alex <[hidden email]> написал:
-- http://groups.google.ru/group/sugr --- Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group. Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email]. Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out. |
что-то я вчера неправильно написал два варианта попутал
-- aNumber to: aNumber do: [ :x | anObject someVariable: (anObject someVariable + x). self collectionObjects add: anObject. ]. и |x| x:=0. aNumber timesRepeat: [ :x | anObject someVariable: (anObject someVariable + x). self collectionObjects add: anObject. x:= x+1]. но в правильном виде тоже не работает. Объекты создавать? Я думал путём добавления их в collectionObjects и они действительно добовляются в количестве aNumber, но у них совсем одинаковые someVariable. Пробовал создовать коллекцию во временой переменной и потом проиди по ней добавляя х но один чёрт... Попробую с отладчиком, может что-то прояснится. суббота, 12 октября 2013 г., 0:07:56 UTC+4 пользователь Assargadon написал:
-- http://groups.google.ru/group/sugr --- Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group. Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email]. Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out. |
Объекты создавать? Я думал путём добавления их в collectionObjects Алекс, считайте, что в переменных всегда хранятся указатели на объекты. Вот вам кусок кода, традиционно показывающий разницу между присваиванием значений и присваиванием указателей (скорее всего вы встречались с аналогичными примерами на других языках): ==================== a:='abcdef'. b:=a. "присваиваем указатель" a at: 2 put: $2. "изменяем первоначальную строчку"
"Теперь посмотрите значения a и b - значение будет 'a2cdef' у обеих, потому что и a и b ссылаются на одну и ту же строку" ==================== 12 октября 2013 г., 5:38 пользователь Genosse Alex <[hidden email]> написал:
-- http://groups.google.ru/group/sugr --- Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group. Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email]. Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out. |
self break действительно полезно!
-- Наконец-то могу рассмотреть, что происходит за [ ]. Наглядно убедился, что всё, что я запихал в коллекцию есть копии ссылок на один объект, а не разные объекты. Но какое решение данной проблемы будет более грамотным? 1. Первое что напрашивается (и действительно работает) это создавать новые объекты, присваивать соответствующей переменой значение переменой исходного объекта и уже с ней проводить манипуляции. Что то вроде: addObject: anObject amount: aNumber |newSomeObject| (0 to: aNumber) do: [ :x | newSomeObject:= SomeObject new. newSomeObject someVariable: anObject someVariable. newSomeObject someVariable: (newSomeObject someVariable + x ). self collectionObjects add: newSomeObject ]. Работает, но если много переменных, то очень громоздко и не гибко. 2. Делать копию объекта. Я использовал copyTwoLevel. Вроде работает как надо Но с копиями, как я читал, всё не так уж просто. Боюсь не будет ли трудно контролировать и чревато ли это какими-то сложно уловимыми проблемами? Стоит ли использовать deepCopy? -- http://groups.google.ru/group/sugr --- Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group. Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email]. Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out. |
Free forum by Nabble | Edit this page |