gpt4 book ai didi

smalltalk - 当我加载包含此类的 Monticello 包时,是否有特定的方法会在类中执行?

转载 作者:行者123 更新时间:2023-12-01 02:28:08 27 4
gpt4 key购买 nike

当我加载包含此类的 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 特殊对待这些类初始化器(就像当您使用更改集而不是 Monticello 时它们被特殊对待一样)。

    所以在你的例子中,一切都很好。正在加载 initialize 的第二个版本将导致它被执行。 (编辑:现在你更新了你的例子,所以初始化本身没有被修改,你需要遵循我下一段中的建议)。

    但要小心:如果另一个软件包版本具有完全相同的 initialize class 方法,不会再次执行。这是因为 Monticello 在加载包时只考虑与图像中不同的方法以及加载版本提供的方法。所以如果你想强制执行 initialize方法,你至少需要给它一个不同的时间戳。

    关于smalltalk - 当我加载包含此类的 Monticello 包时,是否有特定的方法会在类中执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14840613/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com