Smalltalk拥有新方法

Smalltalk拥有新方法,smalltalk,gnu-smalltalk,Smalltalk,Gnu Smalltalk,问题是从未调用新方法,所以我无法设置值或调用初始化函数。而且在这样的事情之后: Object subclass: Node [ |value| new [ Transcript show: 'Test'. value := 6. ] getValue [ ^value. ] set:sth [ value := sth. ] ] |data| da

问题是从未调用新方法,所以我无法设置值或调用初始化函数。而且在这样的事情之后:

Object subclass: Node [     

    |value|

    new [
        Transcript show: 'Test'.
            value := 6.
    ]

    getValue [
        ^value.
    ]

    set:sth [
        value := sth.
    ]

]

|data|
data := Node new.
Transcript show: (data getValue) printString ; cr. "nil"
data set:5.
Transcript show: (data getValue) printString. "5"

方法被调用。如何解决这个问题?

据我所知,您将new定义为实例的方法,而不是类

当您调用Node new时,会向类对象节点发送一条消息,它会创建一个自身实例,您可以将该实例分配给对象变量。然后,当您向该变量发送new时,接收方是Node的一个实例,并且具有您定义的new


以下是一个关于如何在GNU Smalltalk中向类添加方法的示例

,据我所知,您将new定义为实例的方法,而不是类

当您调用Node new时,会向类对象节点发送一条消息,它会创建一个自身实例,您可以将该实例分配给对象变量。然后,当您向该变量发送new时,接收方是Node的一个实例,并且具有您定义的new

下面是一个关于如何在GNU Smalltalk中向类添加方法的示例,必须在Node类上定义new才能工作:

请注意,在这种情况下,不能从new访问值,因此必须调用setter

必须在Node类上定义new才能工作:


注意,在这种情况下,不能从new访问该值,因此必须调用setter

是GNU Smalltalk吗?嗯。。。我想是的,它改变了什么吗?事实上,到目前为止,我刚刚开始在ideone下编译它。这是GNU Smalltalk吗?嗯。。。我想是的,它改变了什么吗?事实上,到目前为止,我刚刚开始在ideone下编译它。@Fuv你在用什么smalltalk?也许您应该将一个方法定义为class>>new[…我已经检查过了,关于您的建议,我得到的是GNU Smalltalk gst 3.1:prog.st:5:key class notfound@Fuv在中为文档添加了urlanswer@Fuv您使用的是什么smalltalk?也许您应该将一个方法定义为class>>new[…我查过了,关于你的提议,我得到的是GNU Smalltalk gst 3.1:prog.st:5:key class notfound@Fuv在回答中为文档添加了url非常感谢。你们两个。非常感谢。你们两个。
object := Node new. "Not called"
object new. "Here is called"
Object subclass: Node [     

    |value|

    getValue [
        ^value.
    ]

    set: sth [
        value := sth.
    ]

]

Node class extend: [
    new [ | node |
        Transcript show: 'Test'.
        node := (super new).
        node set: 6.
        ^ node
    ]
]