簡體   English   中英

當我加載包含此類的Monticello包時,是否有一個特定的方法可以在類中執行?

[英]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
  • 如果我將版本1加載到空圖像中,一切正常。
  • 如果我將版本2加載到空圖像中,一切正常。
  • 如果我加載第一個版本1然后加載版本2,則版本2加載錯誤的默認值。

所以我希望當一個包含這個類的Monticello包加載到一個圖像中時,會在類中調用一些方法,所以我可以重新初始化該類。 有嗎? 還有另一個解決這個問題的方法嗎?

是的,加載MC包時會執行一個特定的方法: initialize方法!

更准確地說,如果initialize方法與圖像中已有的方法不同,則會執行它。 MC特別對待這些類初始化程序(就像它們在使用更改集而不是蒙蒂塞洛時特別對待它們一樣)。

所以在你的例子中,一切都很好。 加載initialize的第二個版本將導致它被執行。 (編輯:既然你更新了你的例子,所以初始化本身並沒有被修改,你需要遵循我下一段中的建議)。

但請注意:如果另一個軟件包版本具有完全相同的initialize類方法,則不會再次執行。 這是因為蒙蒂塞洛在加載包時只考慮與圖像中的方法不同的方法,以及加載版本提供的方法。 因此,如果要強制執行initialize方法,則至少需要為其提供不同的時間戳。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM