2017-02-09 74 views
1

我創建了一個Game類,我有一個名爲Board的方法,它必須接受2個整數的stdin,並且1個整數將被分配給列變量,另一個整數將被分配給行變量。因此,例如,開放成績單上菲羅和打字:如何在Pharo Smalltalk的腳本中調用方法後接受參數?

「遊戲新板2 3」

應列= 2和行= 3,但我無法弄清楚如何做到這一點。

這裏是我的代碼試圖

board 

| col rows | 

col := stdin nextNumber 

rows := stdin nextNumber 

Transcript cr; show: col asString, rows asString 

這不起作用。我必須創建一個棋盤遊戲,我甚至無法弄清楚如何接受來自成績單/工作區的爭論,並且我下週一將它搞砸了!

回答

3

讓我告訴你這種慣用的方式。如果你在操場上鍵入

遊戲newBoardColumns:2行:3

然後大一去,一個調試器會彈出來告訴你,那#newBoardColumns:rows:消息沒有被遊戲的理解。在你的調試器中,你有一個創建按鈕,允許你添加該方法。如果選擇將其添加博弈的類端,可以實現它,就像這樣

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

,將返回遊戲類的新實例,並與列和行方法初始化。如果保存並在調試器中重新啓動執行,它會抱怨它不知道#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 
2

該腳本更像是一個日誌流,而不是交互式終端,但您可以在其中評估Smalltalk表達式(您也可以在Workspace/Playground和許多其他「文本框」中執行此操作)。這意味着您的「輸入」/評估文本必須是有效的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將這些尺寸打印到腳本中。

相關問題