Smalltalk拥有自己的新方法

Fuv*_*Fuv 1 smalltalk gnu-smalltalk

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

问题是new永远不会调用方法,所以我不能设置值或调用initialize函数.此外之后:

object := Node new. "Not called"
object new. "Here is called"
Run Code Online (Sandbox Code Playgroud)

该方法被调用.如何解决?

Tob*_*ias 5

#new必须定义Node class工作:

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

请注意,在这种情况下value无法访问#new,因此必须调用setter