[英]Is there a specific method that would get executed in a class when i load a Monticello package containing this class?
當我加載包含此類的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包加載到一個圖像中時,會在類中調用一些方法,所以我可以重新初始化該類。 有嗎? 還有另一個解決這個問題的方法嗎?
是的,加載MC包時會執行一個特定的方法: initialize
方法!
更准確地說,如果initialize
方法與圖像中已有的方法不同,則會執行它。 MC特別對待這些類初始化程序(就像它們在使用更改集而不是蒙蒂塞洛時特別對待它們一樣)。
所以在你的例子中,一切都很好。 加載initialize
的第二個版本將導致它被執行。 (編輯:既然你更新了你的例子,所以初始化本身並沒有被修改,你需要遵循我下一段中的建議)。
但請注意:如果另一個軟件包版本具有完全相同的initialize
類方法,則不會再次執行。 這是因為蒙蒂塞洛在加載包時只考慮與圖像中的方法不同的方法,以及加載版本提供的方法。 因此,如果要強制執行initialize
方法,則至少需要為其提供不同的時間戳。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.