在Pharo Smalltalk上调用成绩单中的方法后,我怎么能接受论证?

时间:2017-02-09 19:22:16

标签: methods arguments smalltalk workspace pharo

我创建了一个Game类,我有一个名为Board的方法,它必须接受2个整数的stdin,并且1个整数将分配给列变量,另一个整数将分配给row变量。例如,在pharo上打开Transcript并输入:

'游戏新板2 3'

应该使column = 2和row = 3,但我无法弄清楚如何做到这一点。

这是我的代码尝试

 board

| col rows |

col := stdin nextNumber

rows := stdin nextNumber

Transcript cr; show: col asString, rows asString

这不起作用。我必须创建一个棋盘游戏,我甚至无法弄清楚如何接受成绩单/工作区中的参数,而且我已经把它搞砸了下周一!...

2 个答案:

答案 0 :(得分:3)

让我告诉你惯用的方式。如果你在操场上打字

  

游戏newBoardColumns:2行:3

然后DoIt然后去,会弹出一个调试器,告诉你游戏不能理解T消息。在调试器中,您有一个允许添加该方法的创建按钮。如果您选择将其添加到Game的类侧,则可以将其实现为类似

的内容
#newBoardColumns:rows:

这将返回Game类的新实例,并使用columns和rows方法对其进行初始化。如果您保存并在调试器中重新启动执行,它会抱怨它不知道newBoardColumns: aColumns rows: aRows ^self basicNew initializeColumns: aColumns rows: aRows; yourself 因此您必须以相同的方式创建它,这次是在Game的实例端

#initializeColumns:rows:

尝试保存时,请务必将initializeColumns: aColumns rows: aRows columns := aColumns. rows := aRows. self initialize. columns添加为实例变量。现在,您可以再次重新启动执行并在检查器窗格中检查您的游戏。

要在成绩单中显示内容,您可以在操场上输入

  

(游戏newBoardColumns:2行:3)显示

和DoIt。这会再次弹出一个调试器,告诉你rows不被理解。你可以在Game中实现它

#show

答案 1 :(得分:2)

Transcript更像是一个日志流,而不是一个交互式终端,但你可以在其中评估Smalltalk表达式(你也可以在Workspace / Playground和许多其他的#34;文本框")中进行评估。这意味着您的"输入" /评估文本必须是有效的Smalltalk表达式。 Game new board 2 3不是。

相反,你的棋盘方法应该有两个参数,如下所示:

boardWithColumns: cols rows: rows
    Transcript cr; show: cols asString, rows asString

请注意已更改的方法签名。与您的代码不同,cols和rows不再是临时变量,而是发送消息的参数。

然后,您可以评估Game new boardWithColumns: 2 rows: 3以将这些尺寸打印到成绩单。