Всех приветствую!
Часто вижу в коде упоминания классов с артиклем или конструкции вроде: memory asString, asNumber и т. д. это что? Просто фигура речи, вместо которой в любой момент написать anAbraKadabra или есть в этом некие железные правила? чем например выше приведённый метод будет отличаться от просто: memory ?
-- -- http://groups.google.ru/group/sugr --- Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group. Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email]. Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out. |
CONTENTS DELETED
The author has deleted this message.
|
На мой взгляд первый вариант не корректен, поскольку допускает вариант
возрата неожиданного результата. Методы доступа к переменным образа не должны манипулировать их значением, за исключением может быть инициализации. Дело конечно хозяйское. 2013/5/31 Владимир Мусулайнен <[hidden email]>: > Это методы которые присутствуют у объектров соответствующих классов. > > то есть объекту в переменной memory отправляют сообщение asString, которое, > скорее всего, реализовано так, что возвращает строковое представление > объекта, то есть некую строку. Строке в свою очередь отправляется сообщение > asNumber которое, исходя из его названия, получив которое строка отдает свое > числовое представление . > > Такие вещи иногда не просто объяснить в печатной форме. Возникает масса > вопросов, которые сформулировать не получается. Тут проще устно - можно меня > найти в скайпе skype_id: vladimir.musulainen > > пятница, 31 мая 2013 г., 20:21:29 UTC+4 пользователь Genosse Alex написал: >> >> Всех приветствую! >> Часто вижу в коде упоминания классов с артиклем или конструкции вроде: >>> >>> memory >>> ^ memory asString asNumber >> >> >> asString, asNumber и т. д. это что? Просто фигура речи, вместо которой в >> любой момент написать anAbraKadabra или есть в этом некие железные правила? >> чем например выше приведённый метод будет отличаться от просто: >>> >>> memory >>> ^ memory >> >> ? > > -- > -- > 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. |
In reply to this post by Genosse
> чем например выше приведённый метод будет отличаться от просто: memory > ?
Тем, что в первом варианте объекту с именем memory посылают сообщение asString, а результату - сообщение asNumber. Вам надо запомнить, что в Смолтоке есть три типа конструкций - присваивание, отправка сообщения и возврат значения. "Фигур речи" нет.
asXXXX - стандартное соглашение для именования методов конвертации из типа получателя в тип ХХХХ. Естественно, объект должен знать, как представить себя в виде строки или числа, поэтому просто поищите в соответствующем классе (или в иерархии) такой метод. И все встанет на свои места :)
Дмитрий 31 мая 2013 г., 20:21 пользователь 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 vmusulainen-2
Такие вещи иногда не просто объяснить в печатной форме. Возникает масса вопросов, которые сформулировать не получается. Тут проще устно - можно меня найти в скайпе skype_id: vladimir.musulainen Спасибо, постараюсь не злоупотреблять. Вам надо запомнить, что в Смолтоке есть три типа конструкций - присваивание, отправка сообщения и возврат значения. "Фигур речи" нет. Я поначалу очень долго искал откуда ноги растут у неких anInteger и т.п. в конструкциях вроде right: anInteger right := anInteger Пока не допендрил, что волен сам писать что угодно на их месте... Поэтому у меня этот вопрос и возник. Спасибо, в явной форме стало понятно, что asString & asNumber это методы, я их нашел в соответствующих классах, но... ...Но теперь мне стало непонятно, что и главное как, по какому праву они делают в переменной "memory" класса являющегося подклассом AlignmentMorph и в конечном счёте в своём наследовании восходящего к Object, и ни String ни Number в этой иерархии таки не встречаются. Как объект может понимать методы других объектов от которых не наследовал? -- http://groups.google.ru/group/sugr --- Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group. Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email]. Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out. |
> ...Но теперь мне стало
непонятно, что и главное как, по какому праву они делают в переменной
"memory" класса являющегося подклассом AlignmentMorph и А вы проверьте тип переменной memory на тот момент. Класс, в котором она содержится, роли не играет. > ...в конечном счёте
в своём наследовании восходящего к Object, и ни String ни Number в этой иерархии таки не встречаются. А чтобы уметь обрабатывать asString (как и asNumber) - не нужно иметь отношение ни к String, ни к Number, в иерархии наследования. И, да, я акцентирую ваше внимание ещё раз - объекту memory посылается только asString. Сообщение asNumber посылаыется уже результату (который, по идее, должен быть строкой). > Как объект может понимать методы других объектов от которых не наследовал? Вдаваясь в дебри, объект может делать это в специальном методе "doesNotUnderstand: aMessage". Или использовать Traits, но это уже другая история, которая, возможно, вас только ещё больше запутает. Дмитрий 1 июня 2013 г., 11:15 пользователь Genosse Alex <[hidden email]> написал:
-- http://groups.google.ru/group/sugr --- Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group. Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email]. Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out. |
Да, вопрос кажись снят...
На меня самого уже снизошло озарение, пока в магазин ходил. Эта переменная инициализируется как '0' т.е. как строка! А я опять на те же грабли наступил... '0' присвоенный это не просто некое значение а полноценный экземпляр соответствующего класса и т.о. переменная не то чтобы вбирает в себя некое значение само по себе, а просто становится ссылкой на некий экземпляр некого другого класса, со своими методами разумеется. суббота, 1 июня 2013 г., 12:24:20 UTC+4 пользователь Dmitry Matveev написал:
-- 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
Привет.
1 июня 2013 г., 11:15 пользователь Genosse Alex <[hidden email]> написал:
Вобще, на мой взгляд, реализация морфов не самый лучший пример для изучения смолтолка с нуля. При всех потрясающих возможностях живого взаимодействия с любыми видимыми объектами, внутренности морфика, мягко говоря, оставляют желать лучшего. Да, морфик очень гибкий, в нем очень много возможностей, и за счет инструментов смолтолка можно докопаться до любых его деталей. Но докопавшись, понимаешь реализация морфика - это ужас.Каждый раз, натыкаясь на очередное "магическое место" в морфике, я поражаюсь, какие смолтокеры могли такое написать? К счастью, Pharo имеет курс на уничтожение подобных "достопримечательностей сквиковского наследия". Конечно, ни в какой другой системе так поиграться с интерфейсом не получится, а это всегда очень интересно. Сквик был моим первым смолтолком, и морфик, возможно, первое, что завлекло меня. В качестве примера для изучения смолтолка я бы посоветовал посмотреть, как устроены FileSystem, Seaside - отличные примеры хорошего смолтолк кода. В общем, весь Smalltalk-80 сюда относится. -- -- 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
А вот ещё вопрос насколько принципиально указывать в явном виде в коде те же самые asString asNumber?
Это просто правила хорошего тона или их несоблюдение чревато потенциальными проблемами?
-- Я удалил asString asNumber при переосмыслении кода образца в свой код без каких либо последствий. Ведь мат операции и так проходят корректно. (по крайней мере в workspace (('2','1')+4=25)=true даёт true) -- http://groups.google.ru/group/sugr --- Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group. Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email]. Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out. |
При использовании методов конвертации (asString asNumber) гарантированно будет получена ссылка на строку или число. Арифмитические операции будут выполняться быстрее если участвуют числа и еще быстрее когда числа одного типа. Выполненный в Workspace пример демонстрирует использования полиморфизма, на мой взгляд очень сильное свойство Smalltalk. В двух словах полиморфизм - реализация методов имеющих одинаковое название, но разное содержимое в различных классах. Именно наличие метода "+" в строке и числах позволяет сложить нескладываемое. Обычно в таких методах сначала определяется тип операндов, далее идет конвертация и в последнем случае арифметическая операция.Числа в Smalltalk реализованы гибко. Автоматическое преобразование одного типа в другой, позволяют забыть о типе числа. Например, выполнить в Workspace 1000 factorial. результатом будет число, экземпляр класса BigInteger. В некоторых реализациях имеются комплексные числа 1 июня 2013 г., 19:34 пользователь Genosse Alex <[hidden email]> написал: А вот ещё вопрос насколько принципиально указывать в явном виде в коде те же самые asString asNumber? -- 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 |