簡體   English   中英

在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.

嘗試保存時,請確保將columnsrows添加為實例變量。 現在,您可以再次重新開始執行,並在檢查器窗格中檢查您的游戲。

要在解說詞中顯示內容,您可以在操場上輸入

(游戲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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM