从多个参数创建对象的类方法

时间:2014-12-05 04:31:22

标签: smalltalk pharo

在Pharo中我想创建一个类方法来创建一个新的person对象,并在一个方法中设置一个名称和年龄(两个参数)

Object subclass: #Person
        instanceVariableNames: 'name age'
        classVariableNames: ''
        category: '...'  

但是我无法访问类方法中的实例变量。

name: n : age: a
        "Class method that creates a Person Object and defines its name and age"

        | person1 |
        person1 := self new.
        person1 name := n. "Unable to compile past this point due to red syntax highlighting
        person1 age := a.
        ^person1.

我的目标是能够致电:

aPerson := Person name: 'Pharo' age: '4'

1 个答案:

答案 0 :(得分:7)

您无法从方法设置实例变量。

要解决您的问题,您可以为实例变量(在实例端...)创建访问器方法,并从类侧构造函数方法中调用它们:

name: n age: a
    "Class method that creates a Person Object and defines its name and age"

    | person1 |
    person1 := self new.
    person1 name: n.
    person1 age: a.
    ^ person1

但是为此目的,通常编写一个实例方法来设置所有变量并在其名称前加上 set ,后跟变量名称:

setName: aString age: aNumber
    personName := aString.
    age := aNumber.
    ^ self

现在你的构造函数 class 方法如下所示:

name: aString  age: aNumber
    ^ self new setName: aString age: aNumber