如何清理 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.

现在的问题是,我不知道如何正确清理我的工作区中下载的所有对象:

enter image description here

正如你所看到的,现在我有来自 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.

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...