如何解决如何清理 Pharo 中杂乱的工作区?
在 Pharo MOOC 中有一个提议的挑战(第 2.15.2 节),包括获取电子邮件地址并获取相关的 Gravatar 图像,作为 Morph 对象。通过在操场上运行以下代码,我能够做到这一点:
| url email |
email := 'stephane.ducasse@inria.fr'.
url := 'http://www.gravatar.com/avatar/',(MD5 hashMessage: email) hex asstring,'.jpg'.
(ZnEasy getJpeg: url) asMorph openInHand.
现在的问题是,我不知道如何正确清理我的工作区中下载的所有对象:
正如你所看到的,现在我有来自 url 的图像(来自之前的拙劣尝试,我在没有首先使用 ZnEasy 获取 jpg 的情况下将 url asMorph openInHand 设置为 ),以及几个灯塔图像(每次我打开检查器生成新的)。
我说正确清理是因为你可以直接退出 Pharo 而不保存,然后再次打开它以获得一个干净的工作区,但这可能并不理想。
到目前为止,我尝试检查创建的对象,看到它们是 ImageMorph 的实例。然后在相关的方法中,我搜索了一些内容,包括“擦除”、“删除”、“删除”或“清除”,但找不到类似的内容。这些是 ImageMorph 的可用方法:
{ImageMorph>>#prepareForRotating.
ImageMorph>>#grabFromScreen.
ImageMorph>>#forwardDirection:.
ImageMorph>>#adoptPaneColor:.
ImageMorph>>#drawOnathensCanvas:.
ImageMorph>>#extent:.
ImageMorph>>#setoptimalResizing.
ImageMorph>>#form:.
ImageMorph>>#shouldFlex.
ImageMorph>>#forwardDirection.
ImageMorph>>#resize:.
ImageMorph>>#areasRemainingToFill:.
ImageMorph>>#heading.
ImageMorph>>#imageExport.
ImageMorph>>#defaultimage.
ImageMorph>>#rotationdegrees.
ImageMorph>>#borderStyle:.
ImageMorph>>#opacityString.
ImageMorph>>#setDirectionFrom:.
ImageMorph>>#rotationdegrees:.
ImageMorph>>#borderWidth:.
ImageMorph>>#isOpaque.
ImageMorph>>#image:.
ImageMorph>>#readFromFile.
ImageMorph>>#drawOn:.
ImageMorph>>#basicExtent:.
ImageMorph>>#form.
ImageMorph>>#withSnapshotBorder.
ImageMorph>>#wantsRecolorHandle.
ImageMorph>>#changeOpacity.
ImageMorph>>#initialize.
ImageMorph>>#addCustomMenuItems:hand:.
ImageMorph>>#isOpaque:.
ImageMorph>>#releaseCachedState.
ImageMorph>>#color:}
我也尝试过执行garbageCollect,只需单击图像并按Delete即可。
解决方法
在手上打开它们后,您已将它们定位在世界中。如果您检查世界,您会看到有许多 ImageMorph。您想排除 Pharo 徽标。如果您检查它,它的扩展名会告诉您徽标已锁定。
World submorphs select: [ :m |
m class = ImageMorph and: [
m isLocked not ] ]
thenDo: [ :m | m delete ]
,
另一种在这种情况下不太实用但对于 smalltalk 来说是独一无二的方法是使用 #allInstances
。你可以这样做
ImageMorph allInstances inspect
返回所有这些图像。在检查器的原始视图中,您可以将它们发送 #delete
。这里不太实用,因为窗口中的图标也是ImageMorphs,所以你会得到一个很长的列表
要查找对象将理解的所有消息,请查看其类及其超类。您会在 delete
类中找到 Morph
,它是 ImageMorph
的超类。
尝试逐行执行:
| url email morph |
email := 'stephane.ducasse@inria.fr'.
url := 'http://www.gravatar.com/avatar/',(MD5 hashMessage: email) hex asString,'.jpg'.
morph := (ZnEasy getJpeg: url) asMorph.
morph openInHand.
morph delete.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。