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)
该方法被调用.如何解决?
#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