Smalltalk 将对现有内核方法的修改保存到Monticello

Smalltalk 将对现有内核方法的修改保存到Monticello,smalltalk,pharo,monticello,Smalltalk,Pharo,Monticello,我正在Smalltalk中开发Phratch Scratch 2.0,并修改了InputEventSensor>>processEvent方法来存储最后按下的键,其方式与存储修改键的方式类似,以便在按下块时它们可以工作 因此,我现在有了一个定制的InputEventSensor类: 按下新实例变量键 修改的方法processEvent 按下键和clearKeystate的新方法 新方法位于一个类别*Phratch中,这很好,因此这些方法会保存到Phratch Monticello包中。但是pro

我正在Smalltalk中开发Phratch Scratch 2.0,并修改了InputEventSensor>>processEvent方法来存储最后按下的键,其方式与存储修改键的方式类似,以便在按下块时它们可以工作

因此,我现在有了一个定制的InputEventSensor类:

按下新实例变量键 修改的方法processEvent 按下键和clearKeystate的新方法
新方法位于一个类别*Phratch中,这很好,因此这些方法会保存到Phratch Monticello包中。但是processEvent呢,它是否应该移到*Phratch类别?那么实例变量呢?

发生了几件事:

首先,将现有方法移动到项目的包中就是我们所说的覆盖。也就是说,当您将包加载到映像中时,现有的方法定义将被您的定义覆盖。我不建议只有在非常必要的时候才撤销。实际上,最好的方法应该是创建钩子,将它们集成到Pharo的代码库中,然后将您的项目插入给定的钩子:

关于用实例变量扩展类,我认为Monticello并不能真正解决这个问题。一种可能的解决方案是在metacello配置中添加预加载操作,将实例变量添加到给定的类中。这样,inst var就安装在方法之前

第三个也是最后一个,了解某个键是否仍被按下的实际好方法是收听KeyDown和keydup事件。当发出KeyUp事件时,释放钥匙。然而,目前在所有平台上,在Pharo上,keyDown和keyUp事件都无法正常工作,用于识别密钥的密钥代码会产生特定于操作系统的值,并且有些密钥尚未得到很好的处理。但是,我相信在即将发布的3.0版本的Pharo中,这一点会变得更好


当然,如果您想让这一点变得更好,您可以做出贡献:。

有几件事正在进行:

首先,将现有方法移动到项目的包中就是我们所说的覆盖。也就是说,当您将包加载到映像中时,现有的方法定义将被您的定义覆盖。我不建议只有在非常必要的时候才撤销。实际上,最好的方法应该是创建钩子,将它们集成到Pharo的代码库中,然后将您的项目插入给定的钩子:

关于用实例变量扩展类,我认为Monticello并不能真正解决这个问题。一种可能的解决方案是在metacello配置中添加预加载操作,将实例变量添加到给定的类中。这样,inst var就安装在方法之前

第三个也是最后一个,了解某个键是否仍被按下的实际好方法是收听KeyDown和keydup事件。当发出KeyUp事件时,释放钥匙。然而,目前在所有平台上,在Pharo上,keyDown和keyUp事件都无法正常工作,用于识别密钥的密钥代码会产生特定于操作系统的值,并且有些密钥尚未得到很好的处理。但是,我相信在即将发布的3.0版本的Pharo中,这一点会变得更好


当然,如果您想让这一点变得更好,您可以做出贡献:。

顺便说一句,我花了大量时间试图不更改InputEventSensor类,但无法使事件处理正常工作。我查看了原始的Scratch+Squeak源代码,可以看出他们已经按照这些思路做了一些事情,所以我复制了他们的方法。顺便说一句,我花了大量时间试图不更改InputEventSensor类,但无法使事件处理正常工作。我查看了原始的Scratch+Squeak源代码,可以看出他们已经按照这些思路做了一些事情,所以我复制了他们的方法。感谢guillepolito的建议,我仍在学习Smalltalk,并感谢听到正确的方法。所以我将在Phratch中研究一种更好的方法。感谢guillepolito的建议,我仍在学习Smalltalk,并感谢听到正确的方法。所以我将在Phratch中研究一种更好的方法。