использование ^ в блоках внутри методов

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
26 messages Options
12
Reply | Threaded
Open this post in threaded view
|

использование ^ в блоках внутри методов

Genosse
Приветствую!

Я к примеру хотел использовать такой несложный блок (m:= некоторое число от 0 до 60):

 0 to: 60 by: 15 do:[:x | (m<x) ifTrue: [m:=x/15]] 

Я рассчитывал, что он вернёт число от 1 до 4 (в зависимости от того в какую из четвертей диапазона попадает m)
Я заблуждался, возвращается 0. Я, получается, не могу правильно прочитать последовательность действий в этом блоке.

И меня мучают два вопроса:
1. В какой же всё таки последовательности будет выполнятся этот блок, какое действие последнее, почему 0?

2. Раз я не понял почему 0 я решил принудительно вернуть результат при помощи ^ 
 0 to: 60 by: 15 do:[:x | (m<x) ifTrue: [^m:=x/15]] 
Здорово! В workspace всё работает...
Но как использовать такой блок в методе, если за ним должен  идти ещё ряд действий?
Можно как-то вернуть значение блока с помощью ^ во временную переменную не прекращая метода?

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.
Reply | Threaded
Open this post in threaded view
|

Re: использование ^ в блоках внутри методов

Dmitry Matveev
1. В какой же всё таки последовательности будет выполнятся этот блок, какое действие последнее, почему 0?

А какое у вас значение m?

Но как использовать такой блок в методе, если за ним должен  идти ещё ряд действий?

Сделать присваивание, кинуть исключение и тут же его поймать. Но это плохой путь.
Хороший путь - перейти к итераторам. Читать последовательность как поток и вручную контролировать переходы (к следующему элементу).

Дмитрий




5 октября 2013 г., 18:59 пользователь Genosse Alex <[hidden email]> написал:
Приветствую!

Я к примеру хотел использовать такой несложный блок (m:= некоторое число от 0 до 60):

 0 to: 60 by: 15 do:[:x | (m<x) ifTrue: [m:=x/15]] 

Я рассчитывал, что он вернёт число от 1 до 4 (в зависимости от того в какую из четвертей диапазона попадает m)
Я заблуждался, возвращается 0. Я, получается, не могу правильно прочитать последовательность действий в этом блоке.

И меня мучают два вопроса:
1. В какой же всё таки последовательности будет выполнятся этот блок, какое действие последнее, почему 0?

2. Раз я не понял почему 0 я решил принудительно вернуть результат при помощи ^ 
 0 to: 60 by: 15 do:[:x | (m<x) ifTrue: [^m:=x/15]] 
Здорово! В workspace всё работает...
Но как использовать такой блок в методе, если за ним должен  идти ещё ряд действий?
Можно как-то вернуть значение блока с помощью ^ во временную переменную не прекращая метода?

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.
Reply | Threaded
Open this post in threaded view
|

Re: использование ^ в блоках внутри методов

Genosse

А какое у вас значение m?

число из диапазона 0 - 60. при любых значениях m возвращается 0 (если конечно не использовать ^) 

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.
Reply | Threaded
Open this post in threaded view
|

Re: использование ^ в блоках внутри методов

Denis Kudriashov
метод #to:do: и не подразумевает возврат какого-либо значения. В таких случаях обычно возвращается получатель сообщения, то есть self, который в данном случае равен нулю.






5 октября 2013 г., 19:33 пользователь Genosse Alex <[hidden email]> написал:

А какое у вас значение m?

число из диапазона 0 - 60. при любых значениях m возвращается 0 (если конечно не использовать ^) 

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.
Reply | Threaded
Open this post in threaded view
|

Re: использование ^ в блоках внутри методов

Denis Kudriashov
в вашем примере используется #to:by:do:. Смысл здесь тот же



5 октября 2013 г., 20:18 пользователь Denis Kudriashov <[hidden email]> написал:
метод #to:do: и не подразумевает возврат какого-либо значения. В таких случаях обычно возвращается получатель сообщения, то есть self, который в данном случае равен нулю.






5 октября 2013 г., 19:33 пользователь Genosse Alex <[hidden email]> написал:


А какое у вас значение m?

число из диапазона 0 - 60. при любых значениях m возвращается 0 (если конечно не использовать ^) 

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.


--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.
Reply | Threaded
Open this post in threaded view
|

Re: использование ^ в блоках внутри методов

Nikolay Kleptsov
In reply to this post by Genosse
возвращает 0 потому что сообщение to:do:by: посылается числу 0. После выполнения цикла это самое число и вернется в качестве ответа. Если выполнить 5 to: 60 by: 15 do:[:x | (m<x) ifTrue: [m:=x/15]] будет ответ 5
А вот выражение где явно указать какую переменную вернуть будет таким
m := 0.
0 to: 60 by: 15 do:[:x | (m<x) ifTrue: [m:=x/15]].
m.

Реализация метода цикла для чисел.
Number>>to: stop by: step do: aBlock
    "Normally compiled in-line, and therefore not overridable.
    Evaluate aBlock for each element of the interval (self to: stop by:
step)."
    | nextValue |
    nextValue := self.
    step = 0 ifTrue: [self error: 'step must be non-zero'].
    step < 0
        ifTrue: [[stop <= nextValue]
                whileTrue:
                    [aBlock value: nextValue.
                    nextValue := nextValue + step]]
        ifFalse: [[stop >= nextValue]
                whileTrue:
                    [aBlock value: nextValue.
                    nextValue := nextValue + step]]

Этот метод явно не возвращает ответ, значит в качестве ответа будет получатель этого сообщения.

В Smalltalk отсутствуют типичные для других яз программирования управляющие конструкции (циклы, условия и т.д.). Все реализовано через обычные методы. Особенно изящно все сделано в коллекциях, где богатый выбор методов. Собственно цикл "для" применяется очень редко. В коллекциях имеются более совершенные методы. Полезно открывать системный браузер, просматривая почти всю систему, кроме примитивов.



5 октября 2013 г., 21:33 пользователь Genosse Alex <[hidden email]> написал:

А какое у вас значение m?

число из диапазона 0 - 60. при любых значениях m возвращается 0 (если конечно не использовать ^) 

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.
Reply | Threaded
Open this post in threaded view
|

Re: использование ^ в блоках внутри методов

Genosse
In reply to this post by Denis Kudriashov
Что же? выходит городить ещё один метод?
У меня запасной вариант рабочий есть
testTest: anObject
 0 to: 60 by: 15 do:[:x | (anObject<x) ifTrue: [^ self test: x/15]] 
но городить лишний метод только ради этого...
Как то не красиво. Да?

суббота, 5 октября 2013 г., 20:19:16 UTC+4 пользователь Denis Kudriashov написал:
в вашем примере используется #to:by:do:. Смысл здесь тот же



5 октября 2013 г., 20:18 пользователь Denis Kudriashov <<a href="javascript:" target="_blank" gdf-obfuscated-mailto="gR0S3xA1HGIJ">dioni...@...> написал:
метод #to:do: и не подразумевает возврат какого-либо значения. В таких случаях обычно возвращается получатель сообщения, то есть self, который в данном случае равен нулю.






5 октября 2013 г., 19:33 пользователь Genosse Alex <<a href="javascript:" target="_blank" gdf-obfuscated-mailto="gR0S3xA1HGIJ">gen...@...> написал:


А какое у вас значение m?

число из диапазона 0 - 60. при любых значениях m возвращается 0 (если конечно не использовать ^) 

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес <a href="javascript:" target="_blank" gdf-obfuscated-mailto="gR0S3xA1HGIJ">sugr+uns...@googlegroups.com.
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.


--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.
Reply | Threaded
Open this post in threaded view
|

Re: использование ^ в блоках внутри методов

Nikolay Kleptsov
зачем городить еще один метод. можно сделать так
MyClass>>MyMethod
|m|
m := 0.
0 to: 60 by: 15 do:[:x | (m<x) ifTrue: [m:=x/15]] .
^ m.


5 октября 2013 г., 22:35 пользователь Genosse Alex <[hidden email]> написал:
Что же? выходит городить ещё один метод?
У меня запасной вариант рабочий есть
testTest: anObject
 0 to: 60 by: 15 do:[:x | (anObject<x) ifTrue: [^ self test: x/15]] 
но городить лишний метод только ради этого...
Как то не красиво. Да?

суббота, 5 октября 2013 г., 20:19:16 UTC+4 пользователь Denis Kudriashov написал:
в вашем примере используется #to:by:do:. Смысл здесь тот же



5 октября 2013 г., 20:18 пользователь Denis Kudriashov <[hidden email]> написал:
метод #to:do: и не подразумевает возврат какого-либо значения. В таких случаях обычно возвращается получатель сообщения, то есть self, который в данном случае равен нулю.






5 октября 2013 г., 19:33 пользователь Genosse Alex <[hidden email]> написал:


А какое у вас значение m?

число из диапазона 0 - 60. при любых значениях m возвращается 0 (если конечно не использовать ^) 

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес sugr+uns...@googlegroups.com.

Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.


--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.
Reply | Threaded
Open this post in threaded view
|

Re: использование ^ в блоках внутри методов

vmusulainen-2
In reply to this post by Genosse
CONTENTS DELETED
The author has deleted this message.
Reply | Threaded
Open this post in threaded view
|

Re: использование ^ в блоках внутри методов

vmusulainen-2
CONTENTS DELETED
The author has deleted this message.
Reply | Threaded
Open this post in threaded view
|

Re: использование ^ в блоках внутри методов

Genosse
Спасибо! 
Теперь буду переваривать все ответы ))

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.
Reply | Threaded
Open this post in threaded view
|

Re: использование ^ в блоках внутри методов

Genosse
вообще, помню, читал, что блок возвращает значение последнего предложения тела
блока, если только нет явного возвращения результата (↑)...
Оказывается не совсем так.... ;)

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.
Reply | Threaded
Open this post in threaded view
|

Re: использование ^ в блоках внутри методов

Yuriy Mironenko
In reply to this post by Genosse
Боже, господа, ну вы даже меня пугаете ответами :)

Если вопрос "посчитать четверти", то ответ будет
(m quo: 15) + 1
и никаких циклов ни с итераторами, ни без (только обратите внимание на числа 0 и 60).

Если вопрос "как в цикле поймать срабатывание условия и выйти по этому условию", то ответ - использовать #detect:


5 октября 2013 г., 21:38 пользователь Genosse Alex <[hidden email]> написал:
Спасибо! 
Теперь буду переваривать все ответы ))

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.
Reply | Threaded
Open this post in threaded view
|

Re: использование ^ в блоках внутри методов

Yuriy Mironenko
In reply to this post by Genosse
Алекс, это именно так.
Блок всегда возвращает значение последнего предложения.
Всегда.

Если есть желание, присоединяйся ко мне в чат или в скайп, я расскажу на пальцах, что и как и почему. А то мы тут можем до скончания века гадать, что именно нужно, и придумывать всё более жуткие варианты ответов - тогда как по правде ответ для тебя - это примерно десяток букв кода почти наверняка :)


5 октября 2013 г., 21:48 пользователь Genosse Alex <[hidden email]> написал:
вообще, помню, читал, что блок возвращает значение последнего предложения тела
блока, если только нет явного возвращения результата (↑)...
Оказывается не совсем так.... ;)

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.
Reply | Threaded
Open this post in threaded view
|

Re: использование ^ в блоках внутри методов

Alex Kogan
Просто в данном случае блок передается в качестве аргумента методу to:by:do: и работает он внутри его. А возвращается результат выполнения метода to:by:do посланого Числу 0, который просто возвращает самого себя.


2013/10/5 Юрий Мироненко <[hidden email]>
Алекс, это именно так.
Блок всегда возвращает значение последнего предложения.
Всегда.

Если есть желание, присоединяйся ко мне в чат или в скайп, я расскажу на пальцах, что и как и почему. А то мы тут можем до скончания века гадать, что именно нужно, и придумывать всё более жуткие варианты ответов - тогда как по правде ответ для тебя - это примерно десяток букв кода почти наверняка :)


5 октября 2013 г., 21:48 пользователь Genosse Alex <[hidden email]> написал:

вообще, помню, читал, что блок возвращает значение последнего предложения тела
блока, если только нет явного возвращения результата (↑)...
Оказывается не совсем так.... ;)

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.
Reply | Threaded
Open this post in threaded view
|

Re: использование ^ в блоках внутри методов

Genosse
In reply to this post by Yuriy Mironenko

Блок всегда возвращает значение последнего предложения.
Всегда.

Да. До меня дошло уже, что блок это только то, что в [ ], и он работает как должен.

quo:  - это то что нужно и здорово в своей простоте...

Печалит, только, что сам бы я точно этого днём с огнём не раскопал.., если только случайно...

Позволю себе по брюзжать ;)
Ещё раз подумал, что якобы крутая крива изучения Smalltalk - это следствие не сложности, а слабой документированности и малого кол-ва "разжёваной" литературы даже на английском.
Тяжеловато просто лопатить всю это иерархию классов и методов,  руководствоваться краткими комментариями к ним  (где они есть). Кстати на таком английском, что переводятся они плохо и зачастую смысл ускользает. 

Вот полтора дня ковырял категорию Kernel-Chronology, пока добился от неё чего хотел... Как всегда всё лежало на поверхности, было бы более или менее развёрнутое описание этих классов и методов, то хватило бы и получаса времени... 

Благо, я могу себе позволить роскошь быть медленным и упрямым в этом изучении.
А вот если бы пришлось думать об освоении Smalltalk как инструмента для конкретной коммерческой работы, то наверное пришлось быстренько переключится на что-то более широко документированное.

На сайте http://rmod.lille.inria.fr/pbe2/ нашёл книжку Deep into Pharo, но похоже она тоже не претендует на роль справочника. 



--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.
Reply | Threaded
Open this post in threaded view
|

Re: использование ^ в блоках внутри методов

vmusulainen-2
CONTENTS DELETED
The author has deleted this message.
Reply | Threaded
Open this post in threaded view
|

Re: использование ^ в блоках внутри методов

Genosse
In reply to this post by Genosse
Есчё вопрос не по теме, но про блоки.

Почему-то не работает как нужно такая конструкция:

aNumber to: aNumber do: [ :x | x:=0. anObject someVariable: (anObject someVariable + x). self collectionObjects add: anObject. x:= x+1].

Почему-то у всех  anObject добавленных в коллекцию collectionObjects все переменные someVariable одинаковые, хотя я рассчитывал, что они будут увеличиваться на х+1 :(
Наверное опять велосипед изобретаю...

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.
Reply | Threaded
Open this post in threaded view
|

Re: использование ^ в блоках внутри методов

Denis Kudriashov
Так у вас anObject внутри цикла не изменяется, поэтому на каждой итерации  вы добавляете одно и тоже


11 октября 2013 г., 22:37 пользователь Genosse Alex <[hidden email]> написал:
Есчё вопрос не по теме, но про блоки.

Почему-то не работает как нужно такая конструкция:

aNumber to: aNumber do: [ :x | x:=0. anObject someVariable: (anObject someVariable + x). self collectionObjects add: anObject. x:= x+1].

Почему-то у всех  anObject добавленных в коллекцию collectionObjects все переменные someVariable одинаковые, хотя я рассчитывал, что они будут увеличиваться на х+1 :(
Наверное опять велосипед изобретаю...

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.
Reply | Threaded
Open this post in threaded view
|

Re: использование ^ в блоках внутри методов

Denis Kudriashov
Вероятно, я невнимательно проситал код и вопрос. Другой вариант: все anObject в каждой итерации цикла один и тот же объект


11 октября 2013 г., 23:02 пользователь Denis Kudriashov <[hidden email]> написал:
Так у вас anObject внутри цикла не изменяется, поэтому на каждой итерации  вы добавляете одно и тоже


11 октября 2013 г., 22:37 пользователь Genosse Alex <[hidden email]> написал:

Есчё вопрос не по теме, но про блоки.

Почему-то не работает как нужно такая конструкция:

aNumber to: aNumber do: [ :x | x:=0. anObject someVariable: (anObject someVariable + x). self collectionObjects add: anObject. x:= x+1].

Почему-то у всех  anObject добавленных в коллекцию collectionObjects все переменные someVariable одинаковые, хотя я рассчитывал, что они будут увеличиваться на х+1 :(
Наверное опять велосипед изобретаю...

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.


--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.
12