[英]Smalltalk own new method
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
方法,因此我無法設置值或調用初始化函數。 而且在這樣的事情之后:
object := Node new. "Not called"
object new. "Here is called"
該方法被調用。 如何解決?
必須在Node class
上定義#new
才能工作:
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
]
]
請注意,在這種情況下,無法從#new
訪問value
,因此必須調用設置器。
據我了解,您將new定義為實例的方法而不是類。
當您將Node new
稱為Node new
,消息將發送到類對象Node
,並創建您自己分配給object
變量的實例。 然后,當您將new
發送給該變量時,接收者是Node
的實例,並且具有您定義的new
這是有關如何在GNU Smalltalk中的類中添加方法的示例http://www.gnu.org/software/smalltalk/manual/html_node/Defining-methods.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.