当我加载包含此类的Monticello包时,是否存在可在类中执行的特定方法?
一个例子:
版本1,
SomeMonticelloPackage-MyName.1.mcz:
Object subclass: #SomeClass
classVariableNames: 'ImportantParameter'
SomeClass class>>defaultParameter
^ false
SomeClass class>>initialize
ImportantParameter := self defaultParameter
在版本2中,我更改了重要参数的默认值
SomeMonticelloPackage-MyName.2.mcz:
SomeClass class>>defaultParameter
^ true
SomeClass class>>initialize
ImportantParameter := self defaultParameter
所以我希望当一个包含这个类的Monticello包被加载到一个图像中时,会在类中调用一些方法,所以我可以重新初始化该类。有吗?还有另一个解决这个问题的方法吗?
答案 0 :(得分:3)
是的,加载MC包时会执行一个特定的方法:initialize
方法!
更准确地说,如果initialize
方法与图像中已有的方法不同,则会执行该方法。 MC特别对待这些类初始值设定项(就像使用更改集而非Monticello时对它们进行特殊处理一样)。
所以在你的例子中,一切都很好。加载initialize
的第二个版本将导致它被执行。 (编辑:既然你已经更新了你的例子,那么初始化本身并没有被修改,你需要遵循我下一段中的建议。)
但请注意:如果另一个软件包版本具有完全相同的initialize
类方法,则不会再次执行。这是因为蒙蒂塞洛在加载包时只考虑与图像中的方法不同的方法,以及加载版本提供的方法。因此,如果您希望强制执行initialize
方法,则至少需要为其提供不同的时间戳。