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

Use*_*job 2 smalltalk pharo

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

Object subclass: #Person
        instanceVariableNames: 'name age'
        classVariableNames: ''
        category: '...'  
Run Code Online (Sandbox Code Playgroud)

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

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.
Run Code Online (Sandbox Code Playgroud)

我的目标是能够致电:

aPerson := Person name: 'Pharo' age: '4'
Run Code Online (Sandbox Code Playgroud)

Mar*_*inW 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
Run Code Online (Sandbox Code Playgroud)

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

setName: aString age: aNumber
    personName := aString.
    age := aNumber.
    ^ self
Run Code Online (Sandbox Code Playgroud)

现在你的构造函数方法看起来像这样:

name: aString  age: aNumber
    ^ self new setName: aString age: aNumber
Run Code Online (Sandbox Code Playgroud)