store/reuse 更改其他代码的 Smalltalk 方法是什么?

What is Smalltalk way to store/reuse changes to others code?

我开始调整 Squeak 类,让它们执行对我来说最好的行为。特别是我添加了一条消息:MCGitRepository>>gitCommandWithOutput 并修改了另一条消息:MCRemoteGitRepository>>basicStoreVersion.

我保存了图像。下次启动 Squeak 时,我的更改将生效。好的

现在,假设我想保存更改并在明天将它们加载到新的 Squeak 图像中。或者将它们移动到另一台计算机。

我有自己的 myClass 可以向现有 类 添加方法,但是在这种情况下,我还需要更改现有消息, MCRemoteGitRepository>>basicStoreVersion

对于这种情况,Smalltalk 中的最佳实践是什么?

P.S。我正在调整的 MetacelloMetacello-git 位于 GitHub。请不要关注这个事实。假设我想更改 Regex-Core 或来自 Squeaksource、Squeakmap 或其他的其他内容。所以,我们不能假设我正在修改来自 Git.

的内容

您可以将 overrides/extensions 维护到变更集或包中的基本映像(以及来自其他来源的包)。变更集是最简单的方法,但随着时间的推移,它们的维护会变得有些麻烦。因此,我建议使用包。

要使方法(无论是您添加的方法还是覆盖方法)成为您自己的包的一部分,只需使用浏览器更改方法的类别。例如,要更改 MCRemoteGitRepository>>basicStoreVersion 所属的包:

  • 导航到 class 并在浏览器中突出显示方法名称(浏览器顶部最右侧的窗格 window)
  • 右键单击以获取上下文菜单
  • select more...
  • 然后 select change category...
  • select new... 然后点击 Choose
  • 输入以星号为前缀的包名称(即 MyPackage 你会输入 *MyPackage) 然后点击 Accept

在丢弃您的工作图像之前,请务必保存您的包。然后您需要做的就是将您的包加载到一个新的图像中以合并您的更改。