如何在Smalltalk中打印多个输出

时间:2014-01-16 23:33:04

标签: smalltalk visualworks

|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"

简单的小小的例子。我只是好奇我怎么能把它打印成X和A作为输出?有没有办法做到这一点,不必在前6行上打印'打印',在底部5行单独'打印'?如果它可以打印出'do it'或单个'打印',请告诉我!

2 个答案:

答案 0 :(得分:4)

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

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

如果您正在谈论实际在某处打印物品,那么您必须详细说明您想要在哪里进行打印。您可以使用Transcript或类似的方式打印它,但是您必须明确地向Transcript发送包含您要打印的内容的消息。

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

另外,我建议您遵循约定,并使变量名称以小写字母开头。

答案 1 :(得分:3)

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

在大多数方言中以某种方式取代stdout的地方之一是名为Transcript的地方/流/窗口,在大多数方言中,这是在启动IDE时首先启动的窗口。

在那里写点什么你很简单:

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

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

Transcript cr.

这会回答你的问题吗?

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