2
|X Y A B C D| 
Y:= 7.
X:= 6.
(X = Y)
    ifTrue: [X := 0]
    ifFalse:[X := 1].
B:=2.
C:=5.
D:=1.
A:= (B squared)*(C-D).
"print both A and X to screen here"

足够简单的smalltalk例子。我只是好奇如何让它打印 X 和 A 作为输出?有没有什么办法可以做到这一点,而不必在前 6 行执行“打印”,在下 5 行单独“打印”?如果它可以打印在一个“做”或一个“打印它”上,请告诉我!

4

2 回答 2

4

您应该定义什么是“打印”以及什么是 X 和 A。

如果“打印”是“打印”操作的结果,那么您通常谈论的是返回 X 和 A,因为“打印”会打印所选代码的返回结果。这样,您必须考虑一个代表 X 和 A 的对象。对于这个对象,您可以定义一个printString方法或printOn:打印结果。或者,您可以作弊并通过做X@A.

如果您正在谈论在某处实际打印该东西,那么您必须更多地说明您想在哪里做。你可以用 Transcript 或类似的方式打印它,但是你必须明确地向 Transcript 发送一条消息,其中包含你想要打印的内容。

现在,如果您想出于“调试/测试”的原因使用它,使用“检查它”会更容易。在您的代码中,您可以向inspect要查看的对象发送消息,并且在执行期间检查器将打开并显示这些对象。

此外,我鼓励您遵循约定并让您的变量名称以小写字母开头。

于 2014-01-17T00:58:18.763 回答
3

Smalltalk 没有等效的 print() 或 println() 等,因为大多数 Smalltalk 环境都存在于窗口环境中。有一些方法可以将输出写入标准输出或标准错误,但这是非常特定于方言的。

在大多数方言中以某种方式替换标准输出的地方之一是名为 Transcript 的位置/流/窗口,在大多数方言中,这是您启动 IDE 时首先启动的窗口。

要在那里写一些东西,你可以简单地做:

Transcript show: 'A=', A asString, ' ; X=', X asString.

(请注意,在 Smalltalk 中,字符串和集合用逗号连接)您还可以通过将消息 cr 发送到 Transcript 来编写 newLine,如下所示:

Transcript cr.

这回答了你的问题了吗?

进一步学习/调查的提示:Transcript只是一个包含 Stream 对象的变量。show:是一条将一些字符串写入该流的消息。asString是一种返回对象的字符串表示形式的方法。

于 2014-01-29T07:38:05.463 回答