new和初始化smalltalk - 如何传递参数进行初始化

时间:2013-04-23 15:40:25

标签: smalltalk

在smalltalk中,当我们通过调用new创建一个对象时调用initialize。我想初始化但使用我自己的参数(在运行时传递)。我怎么能这样做。

e.g。 Myobjcet new

但是如何将参数传递给它,以便将它们传递给初始化。 我正在使用Pharo。

2 个答案:

答案 0 :(得分:5)

正确地编写复杂对象层次结构的实例化和初始化代码在Smalltalk中很棘手。更重要的是,Object中实现的默认初始化逻辑在不同的Smalltalk方言中是不同的(即Pharo决定引入默认初始化器,使事情变得更糟)。

为避免混淆并制定清晰一致的规则,Seaside团队决定对其所有代码应用以下规则:

Object-Initialization at Seaside

Seaside代码还包括Code Critic规则,用于检查使用建议的初始化模式时的错误。

答案 1 :(得分:2)

如果我记得,应该避免重新实现类方法newinitialize

相反,您可以创建自己的类方法(除了new或initialize之外),它接受参数,并在创建新实例时使用它们。例如,在Squeak中查看类with:的类方法Collection。它首先创建一个集合实例,然后将作为参数传递的对象添加到实例中。

with: anObject 
    "Answer an instance of me containing anObject."

    ^ self new
        add: anObject;
        yourself

您的Pharo可能基于吱吱声,因此您应该在图片中为Collection找到相同或类似的类方法。