Pharo 状态损坏,如何保存我的代码?

Pharo state corrupt, how to save my code?

使用 DynamicComposableModel 并在调试器中编辑我的方法后,我的 Pharo 6.1 图像达到了这个状态:

Instance of SpecLayout did not understand #visibleSlots

Instance of SpecLayout did not understand #instVarNames

。由于这些错误,我无法 "File Out" 我的代码。我什至无法浏览我的 class,它实际上被称为 "UIVidya",应该由

定义
ComposableModel subclass: #UIVidya
    instanceVariableNames: 'vidya listE editE tabmgr'
    classVariableNames: ''
    poolDictionaries: ''
    category: 'vkVidya'!

。在损坏的图像中,UIVidya classLayout returns SpecLayout。在健康的图像中,UIVidya classLayout returns FixedLayout。我不是故意做这个改变的,甚至不知道它是怎么发生的。我可以在不放弃最后更改的情况下就地修复损坏的 Pharo 图像吗?

看起来你的图像没有损坏。第二条错误消息表明您有一个 SpecLayout 实例,其中需要 class(大概是 SpecLayout)。尝试定义方法

instVarNames
  ^self class instVarNames

visibleSlots
  ^self class visibleSlots

SpecLayout 的实例端,看看您是否可以继续前进并找到损坏的对象。您可以随时返回此处获取更多信息。修复问题后,不要忘记删除新的虚假方法。

通过在 Playground 中执行此操作,我能够恢复正常:

UIVidya layout: sdfgh

(与 UIVidya layout: nil 相同)。感谢您的关注,真正有用的是积极使用 System BrowserPlayground 来比较损坏和未损坏的 Pharo 实例。现在我可以 "File Out" 我的代码了!

编辑:

问题来自 https://benjamin.vanryseghem.com/projects/spec/docs/dynamic/ 的过时教程,其中包含发送 layout: 的代码。不要在现代 Pharo 中这样做!