2011-04-08 67 views
5

我是新來的Smalltalk,並且像我學過的其他所有編程語言一樣,我試圖做一個簡單的「hello world」程序。我瞭解到,在菲羅/佳樂你要做的就是打開一個記錄窗口,輸入以下代碼到工作區窗口,然後按下「Alt鍵-d」運行它。至於如何唯一標識Pharo/Squeak中的副本窗口?

Transcript show: 'hello world'; cr.

我明白了,行意味着參數發送「秀」消息「Hello World」的談話對象,並如預期,我的成績單窗口現在顯示:

hello world

到目前爲止好,但是,當我打開第二個副本窗口並再次運行代碼,我發現現在兩個副本窗口都是ha已經:

hello world

由於如果兩個轉錄窗口由標識符「解說詞」標識。這讓我感到困惑,因爲我認爲轉錄窗口必須是轉錄窗口類的「實例」。因此,不應該有辦法唯一標識它們嗎?

回答

11

這是一個複雜和非常好的問題。 Smalltalk有一個大字典,其中存儲所有全局變量。全局通常是類,但在那裏可能有任何對象。這只是一本字典(鍵/值)。我所說的這個大字典叫做Smalltalk。寫「Smalltalk檢查」,你會看到它。它是SmalltalkImage類的獨特實例。

所以......當你的代碼中MyClass類型,這是因爲在「Smalltalk的位置:#MyClass」的價值,你的類。但你也可以這樣做:Smalltalk:#mariano放:'mariano'。然後你可以在任何地方寫上「mariano」,你會得到字符串「mariano」。

成績單就是這樣。在(Smalltalk:#Transcript)中,它保留了Transcript的獨特實例。事實上,這可能不是一個成績單類的實例,而是另一個。在Pharo中,它是ThreadSafeTranscript的實例。檢查:

ThreadSafeTranscript instanceCount - > 1點 成績單開放。 抄錄打開。 抄錄打開。

而你將永遠有一個。因爲成績單本身就是MODEL。不是這個看法。視圖(打開Transcript時打開的窗口)是PluggableTextMorph的實例,其模型是Transcript的唯一實例。檢查它:

PluggableTextMorph instanceCount - >> 11 抄錄打開。 抄錄打開。 抄錄打開。 PluggableTextMorph instanceCount - >> 14

更多詳情,請打開「Transcript open」。

乾杯

+0

感謝您的詳細解答 – oscarkuo 2011-04-11 21:23:18

3

成績單是一個全局變量保持實例。檢查它看到它的類,並因此看到如何打開另一個窗口,你將持有一個本地參考。