2017-02-09 3 views
1

私はGameクラスを作成しました。私は、2つの整数のstdinを受け入れる必要があるBoardというメソッドを持っています.1つの整数は列変数に割り当てられ、もう1つの整数は行変数に割り当てられます。したがって、たとえば、ファロの開放トランスクリプトをして、これを入力:Pharo Smalltalkのトランスクリプトでメソッドを呼び出した後、どのように引数を受け入れることができますか?

「ゲームの新しいボード2の3」

は、カラム= 2と行= 3をしなければならないが、私はこれを行う方法を見つけ出すことはできません。

は、ここに私のコードの試み

board 

| col rows | 

col := stdin nextNumber 

rows := stdin nextNumber 

Transcript cr; show: col asString, rows asString 

これが動作しないです。私はボードゲームを作成しなければならないし、トランスクリプト/ワークスペースからの議論を受け入れる方法を理解することさえできず、次の月曜日に締め切られるのだ!

答えて

3

私はあなたに慣用的な方法を教えてあげましょう。 2行:あなたはあなたの遊び場

ゲームnewBoardColumnsに入力した場合は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)で入力することができ

やドイトを表示します。それは#showが理解されていないことを伝え、デバッガを再びポップアップ表示します。ゲームでそれを実装することができます

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

Transcriptは対話型端末ではなく、ロギングストリームに似ていますが、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を評価して、これらの寸法をトランスクリプトに印刷することができます。

関連する問題