在 smalltalk 中,当我们通过调用 new 创建对象时,调用 initialize 。我想初始化但使用我自己的参数(在运行时传递)。我怎样才能做到这一点。
例如Myobjcet new
但是我如何将参数传递给它,以便它们被传递给初始化。我正在使用Pharo。
在 smalltalk 中,当我们通过调用 new 创建对象时,调用 initialize 。我想初始化但使用我自己的参数(在运行时传递)。我怎样才能做到这一点。
例如Myobjcet new
但是我如何将参数传递给它,以便它们被传递给初始化。我正在使用Pharo。
如果我记得,应该避免重新实现类new
方法initialize
。
相反,您可以创建自己的带参数的类方法(除了 new 或 initialize),并在创建新实例时使用这些方法。例如,Squeak
查看 class 的类with:
方法Collection
。它首先创建一个集合实例,然后将作为参数传递的对象添加到该实例中。
with: anObject
"Answer an instance of me containing anObject."
^ self new
add: anObject;
yourself
您Pharo
可能基于 Squeak,因此您应该Collection
在图像中找到相同或类似的类方法。
在 Smalltalk 中正确编写复杂对象层次结构的实例化和初始化代码是很棘手的。Object
更重要的是,在不同的 Smalltalk 方言中实现的默认初始化逻辑是不同的(即 Pharo 决定引入默认初始化器,这让事情变得更糟)。
为了避免混淆并制定清晰一致的规则,Seaside 团队决定对其所有代码应用以下规则:
此外,Seaside 代码还包括 Code Critic 规则,用于检查建议的初始化模式使用中的错误。