|
Я работаю над новым браузером Calypso. Могу поддержать ваш кейс. Попробуйте загрузить из каталога. И скажите, где ломается. И пришлите пример кода для обертки методов.
(Все основные фичи работают)
Re: Удаление метода без ошибок
|
Кстати, если есть объект метода, то для удаления скажитwitter.png\" style\x3D\"width:16px;height:16px;margin-top:.2em;border:none;\"/\x3E \x3C/a\x3E \x3Ca href\x3D\"http://www.facebook.com/share.php?v\x3D4&src\x3Dbm&u\x3Dhttps%3A%2F%2Fforum.world.st%2F-tp4952838p4952909.html&t\x3DRe%3A+%D0%A3%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5+%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0+%D0%B1%D0%B5%D0%B7+%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA\" title\x3D\"Facebook\" target\x3D\"_blank\" ignore\x3D\"y\"\x3E \x3Cimg src\x3D\"/images/social/facebook.png\" style\x3D\"width:16px;height:16px;margin-top:.2em;border:none;\"/\x3E \x3C/a\x3E \x3Ca href\x3D\"http://del.icio.us/post?url\x3Dhttps%3A%2F%2Fforum.world.st%2F-tp4952838p4952909.html&title\x3DRe%3A+%D0%A3%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5+%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0+%D0%B1%D0%B5%D0%B7+%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA\" title\x3D\"Delicious\" target\x3D\"_blank\" ignore\x3D\"y\"\x3E \x3Cimg src\x3D\"/images/social/delicious.png\" style\x3D\"width:16px;height:16px;margin-top:.2em;border:none;\"/\x3E \x3C/a\x3E \x3Ca href\x3D\"http://www.google.com/bookmarks/mark?op\x3Dadd&bkmk\x3Dhttps%3A%2F%2Fforum.world.st%2F-tp4952838p4952909.html&title\x3DRe%3A+%D0%A3%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5+%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0+%D0%B1%D0%B5%D0%B7+%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA\" title\x3D\"Google Bookmarks\" target\x3D\"_blank\" ignore\x3D\"y\"\x3E \x3Cimg src\x3D\"/images/social/google.png\" style\x3D\"width:16px;height:16px;margin-top:.2em;border:none;\"/\x3E \x3C/a\x3E \x3Ca href\x3D\"http://www.stumbleupon.com/submit?url\x3Dhttps%3A%2F%2Fforum.world.st%2F-tp4952838p4952909.html&title\x3DRe%3A+%D0%A3%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5+%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0+%D0%B1%D0%B5%D0%B7+%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA\" title\x3D\"Stumble Upon\" target\x3D\"_blank\" ignore\x3D\"y\"\x3E \x3Cimg src\x3D\"/images/social/stumbleupon.png\" style\x3D\"width:16px;height:16px;margin-top:.2em;border:none;\"/\x3E \x3C/a\x3E \x3Ca href\x3D\"http://www.linkedin.com/shareArticle?mini\x3Dtrue&url\x3Dhttps%3A%2F%2Fforum.world.st%2F-tp4952838p4952909.html&title\x3Dhttps%3A%2F%2Fforum.world.st%2F-tp4952838p4952909.html&source\x3DSmalltalk\" title\x3D\"LinkedIn\" target\x3D\"_blank\" ignore\x3D\"y\"\x3E \x3Cimg src\x3D\"/images/social/linkedin.png\" style\x3D\"width:16px;height:16px;margin-top:.2em;border:none;\"/\x3E \x3C/a\x3E \x3Ca href\x3D\"http://digg.com/submit?phase\x3D2&url\x3Dhttps%3A%2F%2Fforum.world.st%2F-tp4952838p4952909.html&title\x3DRe%3A+%D0%A3%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5+%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0+%D0%B1%D0%B5%D0%B7+%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA\" title\x3D\"Digg\" target\x3D\"_blank\" ignore\x3D\"y\"\x3E \x3Cimg src\x3D\"/images/social/digg.png\" style\x3D\"width:16px;height:16px;margin-top:.2em;border:none;\"/\x3E \x3C/a\x3E','white-space:nowrap');
dropdown.build('dd_postdropdown4952909');
dropdown.loadOnClick('/template/NamlServlet.jtp?macro=post_dropdown_later&node=4952909&_=' + Math.floor(Math.random()*999999));
Re: Удаление метода без ошибок
|
Кстати, если есть объект метода, то для удаления скажите ему removeFromSystem
--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу "Russian Smalltalk User Group".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес [hidden email].
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.
|
|
четверг, 29 июня 2017 г., 15:08:52 UTC+3 пользователь Denis Kudriashov написал: Кстати, если есть объект метода, то для удаления скажите ему removeFromSystem
Спасибо, запомню. 29 июня 2017 г. 14:06 пользователь "Denis Kudriashov" < [hidden email]> написал: Я работаю над новым браузером Calypso. Могу поддержать ваш кейс. Попробуйте загрузить из каталога. И скажите, где ломается. И пришлите пример кода для обертки методов.
(Все основные фичи работают)
Я уже удалил свою реализацию через обёртки, но быстренько набросал минимум снова (ниже код) Как понимаю проблема из-за обращения к методам метода, а вместо него объект который их не имеет. Начал распутывать цепочку.., но притомился ;) Файл прикрепить нельзя поэтому прямо текстом: ProxyTMP.st AbstractObjectsAsMethod subclass: #PTMPMethodWrapper instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'ProxyTMP'! !PTMPMethodWrapper methodsFor: 'evaluation' stamp: 'AlexanderR 6/29/2017 15:24'! run: selector with: arguments in: aReceiver ^ aReceiver data perform: selector withArguments: arguments! !
ClassTestCase subclass: #ProxyMakeMeErrorTest instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'ProxyTMP'! !ProxyMakeMeErrorTest methodsFor: 'tests' stamp: 'AlexanderR 6/29/2017 15:39'! testMakeMeError | proxy data | proxy := ProxyTMP new. data := {1 . 2 . 3}. proxy data: data. self assert: proxy first = data first. "ProxyTMP methodDict removeKey: #first"! !
Object subclass: #ProxyTMP instanceVariableNames: 'data' classVariableNames: '' poolDictionaries: '' category: 'ProxyTMP'! !ProxyTMP methodsFor: 'accessing' stamp: 'AlexanderR 6/29/2017 15:28'! doesNotUnderstand: aMsg ^ (data respondsTo: aMsg selector) ifTrue: [ self class methodDict at: aMsg selector put: PTMPMethodWrapper new. aMsg sendTo: self ] ifFalse: [ data doesNotUnderstand: aMsg ]! ! !ProxyTMP methodsFor: 'accessing' stamp: 'AlexanderR 6/29/2017 15:21'! data ^ data! ! !ProxyTMP methodsFor: 'accessing' stamp: 'AlexanderR 6/29/2017 15:21'! data: anObject data := anObject! !
--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу "Russian Smalltalk User Group".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес [hidden email].
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.
|
|
Загрузил Calypso. Он не ломается как наутилус, открывает дебагер. Это хорошо! Сподручнее распутывать змеиный клубок четверг, 29 июня 2017 г., 15:06:51 UTC+3 пользователь Denis Kudriashov написал: 29 июня 2017 г. 11:47 пользователь "Александр" <<a href="javascript:" target="_blank" gdf-obfuscated-mailto="g_7S6_QxBAAJ" rel="nofollow" onmousedown="this.href='javascript:';return true;" onclick="this.href='javascript:';return true;">gen...@...> написал: Всё верно... Но блог я пока не осилю. Потому сюда запостил (ясно, что так или иначе, но что то бы сделал), так как эта тема может когда нибудь нагуглится кем то и это будет хорошо
ЗЫ: Кстати теперь способ "Объекты как обёртки методов" ломает GUI, я вчера день потратил на распутывание и плюнул, решил реализовывать прокси как создание методов на лету
Я работаю над новым браузером Calypso. Могу поддержать ваш кейс. Попробуйте загрузить из каталога. И скажите, где ломается. И пришлите пример кода для обертки методов.
(Все основные фичи работают)
(ибо просто переопределение doesNotUnderstand: примерно в 6 раз медленнее). Это не так изящно, но присутствие документации по GUI и иже с ним только в головах авторов не оставляют выбора. (Проект "Качели" кадр 6 :) ) четверг, 29 июня 2017 г., 11:50:42 UTC+3 пользователь Vladimir Musulainen написал: Заведите блог и начните писать свои решения. Если не сделаете, то ваши знания и опыт останутся вашим приватным достоянием. И следующий после вас снова будет жаловаться на отсутствие документации и все такое прочее.
ну собственно дошёл ощупью до removeSelector::) Вроде ошибок не замечаю... пока. Не знаю может есть более штатное решение. ЗЫ: Каких то 2 часа на это... Чего не сделаешь для души :) Вот собственно иллюстрация к тому, что не только на русском, но даже на английском документация крайне слаба. В некоторых аспектах методы раскиданы х знает где по десятку классов не очевидным образом, плюс встроены в характерные длинючие цепочки. И всё это прекрасным образом не документировано :D четверг, 29 июня 2017 г., 11:00:37 UTC+3 пользователь Dmitry Zamotkin написал: В Pharo есть же Refactoring Browser? Посмотрите в сорсах, как там реализовано. 29 июня 2017 г., 9:17 пользователь Александр <[hidden email]> написал: Вопрос публикуется в просветительских целях, т.с. заодно поддержать жизнь в конференции ;)
Вероятно сам докопаюсь, но всё же может кто то быстрее подскажет. Pharo 6 Как удалить программно метод из класса что бы избежать ошибок?банальный methodDict removeKey: - приводит к ошибкам в том числе и в GUI менее банальный removeSelectorSilently: - приводит к ошибке т.к. в RPackage>> classDefinedSelectors остаётся селектор уже удалённого метода.
--
--
<a href="http://groups.google.ru/group/sugr" rel="nofollow" target="_blank" onmousedown="this.href='http://groups.google.ru/group/sugr';return true;" onclick="this.href='http://groups.google.ru/group/sugr';return true;">http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу "Russian Smalltalk User Group".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес [hidden email].
Чтобы настроить другие параметры, перейдите по ссылке <a href="https://groups.google.com/d/optout" rel="nofollow" target="_blank" onmousedown="this.href='https://groups.google.com/d/optout';return true;" onclick="this.href='https://groups.google.com/d/optout';return true;">https://groups.google.com/d/optout.
-- Дмитрий Замоткин
--
--
<a href="http://groups.google.ru/group/sugr" rel="nofollow" target="_blank" onmousedown="this.href='http://groups.google.ru/group/sugr';return true;" onclick="this.href='http://groups.google.ru/group/sugr';return true;">http://groups.google.ru/group/ sugr
---
Вы получили это сообщение, поскольку подписаны на группу "Russian Smalltalk User Group".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес [hidden email].
Чтобы настроить другие параметры, перейдите по ссылке <a href="https://groups.google.com/d/optout" rel="nofollow" target="_blank" onmousedown="this.href='https://groups.google.com/d/optout';return true;" onclick="this.href='https://groups.google.com/d/optout';return true;">https://groups.google.com/d/optout.
--
--
<a href="http://groups.google.ru/group/sugr" target="_blank" rel="nofollow" onmousedown="this.href='http://groups.google.ru/group/sugr';return true;" onclick="this.href='http://groups.google.ru/group/sugr';return true;">http://groups.google.ru/group/ sugr
---
Вы получили это сообщение, поскольку подписаны на группу "Russian Smalltalk User Group".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес <a href="javascript:" target="_blank" gdf-obfuscated-mailto="g_7S6_QxBAAJ" rel="nofollow" onmousedown="this.href='javascript:';return true;" onclick="this.href='javascript:';return true;">sugr+uns...@googlegroups.com.
Чтобы настроить другие параметры, перейдите по ссылке <a href="https://groups.google.com/d/optout" target="_blank" rel="nofollow" onmousedown="this.href='https://groups.google.com/d/optout';return true;" onclick="this.href='https://groups.google.com/d/optout';return true;">https://groups.google.com/d/optout.
--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу "Russian Smalltalk User Group".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес [hidden email].
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.
|
|
Сори за офтоп... кадр смешной на глаза попался, и как раз под настроение.. не смог удержаться :D
--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу "Russian Smalltalk User Group".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес [hidden email].
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.
|
|
Кстати красный крест тоже можно дебажить. В хало меню красного морфа есть команда для дебага ошибки. Это конечно не удобно, иногда сложно выбрать нужный морф. И кроме того, дебагер будет не на живом процессе.
--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу "Russian Smalltalk User Group".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес [hidden email].
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.
|
|
А какой пакет используете для враперов? (AbstractObjectsAsMethod это откуда?)
--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу "Russian Smalltalk User Group".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес [hidden email].
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.
|
|
В стандартной поставке Фаро (по кр. мере 6-ой) Всёго лишь реализует заглушки для 6 методов 'From Pharo6.0 of 13 May 2016 [Latest update: #60499] on 30 June 2017 at 7:13:49.177373 am'! Object subclass: #AbstractObjectsAsMethod instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Tests-ObjectsAsMethods'! !AbstractObjectsAsMethod methodsFor: 'compatibility' stamp: 'DenisKudryashov 11/15/2016 13:53'! package ^self class package! ! !AbstractObjectsAsMethod methodsFor: 'compatibility' stamp: 'md 3/1/2006 14:25'! flushCache! ! !AbstractObjectsAsMethod methodsFor: 'compatibility' stamp: 'MarcusDenker 2/11/2013 16:06'! origin ^self class! ! !AbstractObjectsAsMethod methodsFor: 'compatibility' stamp: 'md 3/1/2006 14:23'! selector: aSymbol! ! !AbstractObjectsAsMethod methodsFor: 'compatibility' stamp: 'md 3/1/2006 14:23'! methodClass: aMethodClass! ! !AbstractObjectsAsMethod methodsFor: 'compatibility' stamp: 'MarcusDenker 2/11/2013 15:34'! pragmas ^#()! !
ЗЫ: Кстати, о чём я говорю?! Не узнаёте случайно ФИО одного из разработчиков, приложивших к нему руку? :D четверг, 29 июня 2017 г., 18:46:23 UTC+3 пользователь Denis Kudriashov написал: А какой пакет используете для враперов? ( AbstractObjectsAsMethod это откуда?)
--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу "Russian Smalltalk User Group".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес [hidden email].
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.
|
|
кстати, просто мысль в слух. Смежная тема.
Класс прокси вроде как логичнее наследовать не от Объекта, а от ПротоОбъекта. Если прокси использовать не как просто заглушку самозаменяющуюся на некий объект, а как и своеобразную обёртку (например хранящую какието переменные, и методы, которыми не хочется захломлять класс Объект), то получается нехорошая штука. Весь пакет методов отвечающих за инспектирование объектов реализованы ниже - в классе Объект, из-за чего при просмотре прохи возникают серьёзные проблемы.
Вот просто просится между ProtoObject и Object какой нибудь BaseObject, в который перенести всю кухню инспекции (он будет обладать минимализмом ProtoObject и в тоже время не будет неполноценным).
Я пока выхожу из ситуации просто банальным дублированием нужного кода в потомка ПротоОбъекта этакий InspectedProtoObject http://smalltalkhub.com/#!/~AlexanderRemizov/InspectedProtoObject (этих методов вроде достаточно, что бы не крашился инспектор) на котором уже и реализую прокси на объектах и прокси на словарях
--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу "Russian Smalltalk User Group".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес [hidden email].
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.
|
|
Хотя уже свой наваял, но весьма любопытно, посмотрю... Скорее всего там те же проблемы с интроспекцией и со всеми инструментами отладки. Вообще, начало казаться, что не совсем правильно т.с. со стратегической т.з. пошло развитие инструментов интроспекции и отладки. Более 30 методов (!) пришлось продублировать в InspectedProtoObject, что бы перестал отваливаться inspector и т.п. И видимо это кол-во будет расти. Это не совсем нормально. Понятно, что это самое простое - вкарячить очередной метод в Object, но это выглядит не правильным в глобальном плане. Подобных методов должно быть исключительный минимум, а Инспектор должен работать на всех объектах образа едино и не навязчиво. PS. Я отдаю себе отчёт, что сейчас это уже крайне сложно сделать и это очень массивная перестройка... Это просто мысль высказанная в слух ) вторник, 4 июля 2017 г., 22:12:49 UTC+3 пользователь Denis Kudriashov написал: Попробуйте проект Ghost <a href="http://dionisiydk.blogspot.fr/2016/03/new-version-of-ghost-is-out.html" style="font-size:12.800000190734863px" target="_blank" rel="nofollow" onmousedown="this.href='http://dionisiydk.blogspot.fr/2016/03/new-version-of-ghost-is-out.html';return true;" onclick="this.href='http://dionisiydk.blogspot.fr/2016/03/new-version-of-ghost-is-out.html';return true;">http://dionisiydk. blogspot.fr/2016/03/new-version-of-ghost-is-out.html. Идея была сделать универсальный фреймворк для проксей (проект был создан Mariano Peck).
К сожалению актуальной документации нет. Но классы с комментами, и тесты демонстрируют, как создавать специфичные объекты. 4 июля 2017 г., 5:22 пользователь Александр <<a href="javascript:" target="_blank" gdf-obfuscated-mailto="-i8YZxrSBQAJ" rel="nofollow" onmousedown="this.href='javascript:';return true;" onclick="this.href='javascript:';return true;">gen...@...> написал: кстати, просто мысль в слух. Смежная тема.
Класс прокси вроде как логичнее наследовать не от Объекта, а от ПротоОбъекта. Если прокси использовать не как просто заглушку самозаменяющуюся на некий объект, а как и своеобразную обёртку (например хранящую какието переменные, и методы, которыми не хочется захломлять класс Объект), то получается нехорошая штука. Весь пакет методов отвечающих за инспектирование объектов реализованы ниже - в классе Объект, из-за чего при просмотре прохи возникают серьёзные проблемы.
Вот просто просится между ProtoObject и Object какой нибудь BaseObject, в который перенести всю кухню инспекции (он будет обладать минимализмом ProtoObject и в тоже время не будет неполноценным).
Я пока выхожу из ситуации просто банальным дублированием нужного кода в потомка ПротоОбъекта этакий InspectedProtoObject <a href="http://smalltalkhub.com/#!/~AlexanderRemizov/InspectedProtoObject" target="_blank" rel="nofollow" onmousedown="this.href='http://www.google.com/url?q\x3dhttp%3A%2F%2Fsmalltalkhub.com%2F%23!%2F~AlexanderRemizov%2FInspectedProtoObject\x26sa\x3dD\x26sntz\x3d1\x26usg\x3dAFQjCNEYzWv3oTGUjGOknNUSS3yBENgKWQ';return true;" onclick="this.href='http://www.google.com/url?q\x3dhttp%3A%2F%2Fsmalltalkhub.com%2F%23!%2F~AlexanderRemizov%2FInspectedProtoObject\x26sa\x3dD\x26sntz\x3d1\x26usg\x3dAFQjCNEYzWv3oTGUjGOknNUSS3yBENgKWQ';return true;">http://smalltalkhub.com/#!/~AlexanderRemizov/InspectedProtoObject (этих методов вроде достаточно, что бы не крашился инспектор) на котором уже и реализую прокси на объектах и прокси на словарях
--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу "Russian Smalltalk User Group".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес [hidden email].
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.
|
12
| |