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