在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'
答案 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