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

标签 smalltalk pharo

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

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'

最佳答案

您不能通过 方法设置实例 变量。

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

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

关于smalltalk - 从多个参数创建对象的类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27308808/

相关文章:

java - Smalltalk 和 Java 中的 OO 之间的主要区别是什么?

smalltalk - 在 Smalltalk 中压缩数据

arrays - 在 Smalltalk 中读取数组中的字符串并将其转换为数组

smalltalk - 双屏 Pharo/Squeak 环境

objective-c - Morphic 中的 Morph 和 Cocoa 中的 NSView 有什么区别?

smalltalk - Pharo Smalltalk - 消息转发,是否可以拦截消息并将其重定向到另一个对象(实例)?

parsing - 如何在 Pharo Smalltalk 中解析这个(见描述)文本文件

coding-style - 在 Pharo 中保存方法的自动格式化

console-application - Smalltalk (Pharo) 如何简单地与用户交互