Smalltalk 如何在Pharo/Squeak中唯一标识转录本窗口?

Smalltalk 如何在Pharo/Squeak中唯一标识转录本窗口?,smalltalk,squeak,pharo,Smalltalk,Squeak,Pharo,我是smalltalk的新手,和我学过的其他编程语言一样,我试着做一个简单的“hello world”程序。我了解到,在Pharo/Squeak中,您要做的是打开一个文本窗口,在工作区窗口中键入以下代码,然后按“Alt-d”运行它: 成绩单节目:“你好,世界”;cr. 据我所知,该行表示将带有参数“hello world”的“show”消息发送到转录本对象,正如预期的那样,我的转录本窗口现在显示: hello world 然而,到目前为止还不错,当我打开第二个成绩单窗口并再次运行代码时,我发现两

我是smalltalk的新手,和我学过的其他编程语言一样,我试着做一个简单的“hello world”程序。我了解到,在Pharo/Squeak中,您要做的是打开一个文本窗口,在工作区窗口中键入以下代码,然后按“Alt-d”运行它:

成绩单节目:“你好,世界”;cr.

据我所知,该行表示将带有参数“hello world”的“show”消息发送到转录本对象,正如预期的那样,我的转录本窗口现在显示:

hello world

然而,到目前为止还不错,当我打开第二个成绩单窗口并再次运行代码时,我发现两个成绩单窗口现在都有:

hello world


就好像两个文本窗口都由标识符“transcript”标识一样。这就是让我困惑的原因,因为我会认为转录窗口必须是转录窗口类的“实例”。因此,难道不应该有一种方法来唯一地识别它们吗?

转录本是一个保存实例的全局变量。检查它以查看其类,从而了解如何打开另一个窗口,您可以在其中保存本地引用。

这是一个复杂而优秀的问题。Smalltalk有一个大型字典,其中存储了所有全局语言。全局变量通常是类,但可以有任何对象。它只是一本字典(键/值)。我说的这本大词典叫做Smalltalk。写下“Smalltalk inspect”,你就会看到它。它是SmalltalkImage类的唯一实例

因此,当您在代码中键入MyClass时,这是因为在值中的“Smalltalk at:#MyClass”中,您拥有该类。但你也可以这样做:Smalltalk在:#mariano放:“mariano”。然后你可以在任何地方写“mariano”,你会得到字符串“mariano”

成绩单是这样的。在(Smalltalk at:#Transcript)中,它保留了Transcript的唯一实例。实际上,它可能不是一个转录本类的实例,而是另一个。在pharo中,它是ThreadSafeTranscript的实例。选中此项:

ThreadSafeTranscript instanceCount->1 成绩单打开。 成绩单打开。 成绩单打开

你将永远拥有一个。因为转录本本身就是模型。不是风景。视图(打开成绩单时打开的窗口)是PluggableTextMorph的实例,其模型是成绩单的唯一实例。检查它:

PluggableTextMorph实例计数->>11 成绩单打开。 成绩单打开。 成绩单打开。 PluggableTextMorph实例计数->>14

要了解更多详细信息,请调试“打开转录本”

干杯