[英]Is it possible to implement an abstract method that is not pure virtual in Pharo Smalltalk?
[英]How can i accept argument after invoking a method in transcript on Pharo Smalltalk?
我創建了一個Game類,並且有一個名為Board的方法,該方法必須接受2個整數的stdin,並且1個整數將分配給column變量,另一個整數將分配給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
這不起作用。 我必須創建一個棋盤游戲,我什至無法弄清楚如何接受筆錄/工作區中的參數,而且我搞砸了下周一到期!
讓我告訴你慣用的方式。 如果您在操場上打字
游戲newBoardColumns:2行:3
然后執行DoIt,然后將彈出一個調試器,告訴您游戲不理解#newBoardColumns:rows:
消息。 在調試器中,有一個創建按鈕,可用於添加該方法。 如果您選擇將其添加到Game的類方面,則可以將其實現為
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.
嘗試保存時,請確保將columns
和rows
添加為實例變量。 現在,您可以再次重新開始執行,並在檢查器窗格中檢查您的游戲。
要在解說詞中顯示內容,您可以在操場上輸入
(游戲newBoardColumns:2行:3)顯示
和DoIt。 這將再次彈出調試器,告訴您#show
不被理解。 您可以在Game中實現為
show
Transcript cr; show: columns asString,' ', rows asString
筆錄更像是一個日志記錄流,而不是一個交互式終端,但是您可以在其中評估Smalltalk表達式(也可以在工作區/游樂場和許多其他“文本框”中進行操作)。 這意味着您的“輸入” /評估文本必須是有效的Smalltalk表達式。 Game new board 2 3
不是。
相反,您的board方法應采用兩個參數,如下所示:
boardWithColumns: cols rows: rows
Transcript cr; show: cols asString, rows asString
注意更改的方法簽名。 與代碼不同,cols和row不再是臨時變量,而是消息的參數發送。
然后,您可以評估Game new boardWithColumns: 2 rows: 3
以將這些尺寸打印到成績單上。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.