簡體   English   中英

Smalltalk自己的新方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM