在Pharo Smalltalk上调用了转录本中的方法后,我如何接受论点



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

"游戏新板2 3">

应该使列=2,行=3,但我不知道如何做到这一点。

这是我的代码尝试

board
| col rows |
col := stdin nextNumber
rows := stdin nextNumber
Transcript cr; show: col asString, rows asString

这行不通。我必须创建一个棋盘游戏,我甚至不知道如何接受成绩单/工作空间中的论点,我搞砸了,下周一就要交了!!

让我向您展示惯用方法。如果你在操场上输入

游戏newBoardColumns:2行:3

然后DoIt and go,会弹出一个调试器,告诉您游戏不理解#newBoardColumns:rows:消息。在调试器中,您有一个创建按钮,可以添加该方法。如果你选择将其添加到游戏的类侧,你可以将其实现为类似的东西

newBoardColumns: aColumns rows: aRows
^self basicNew
initializeColumns: aColumns rows: aRows;
yourself

这将返回Game类的一个新实例,并使用columns和rows方法对其进行初始化。如果你保存它并在调试器中重新启动执行,它会抱怨它不知道#initializeColumns:rows:,所以你必须以同样的方式创建它,这次是在Game的实例端。

initializeColumns: aColumns rows: aRows
columns := aColumns.
rows := aRows. 
self initialize.

尝试保存时,请确保添加columnsrows作为实例变量。现在,您可以再次重新开始执行,并在检查器窗格中检查您的游戏。

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

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

和DoIt。这将再次弹出一个调试器,告诉您#show不被理解。你可以在游戏中实现

show
Transcript cr; show: columns asString,' ', rows asString

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

相反,你的董事会方法应该有两个论点,如下所示:

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

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

然后,您可以评估Game new boardWithColumns: 2 rows: 3,将这些维度打印到转录本中。

最新更新