我创建了一个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
这不起作用。我必须创建一个棋盘游戏,我甚至无法弄清楚如何接受成绩单/工作区中的参数,而且我已经把它搞砸了下周一!...
答案 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
以将这些尺寸打印到成绩单。