2
|X Y A B C D| 
Y:= 7.
X:= 6.
(X = Y)
    ifTrue: [X := 0]
    ifFalse:[X := 1].
B:=2.
C:=5.
D:=1.
A:= (B squared)*(C-D).
"print both A and X to screen here"

十分に単純な小さな smalltalk の例。X と A を出力として出力する方法を教えてください。上の6行で「印刷」を実行し、下の5行で別の「印刷」を実行する必要なしにそれを行う方法はありますか? 'do it' または 1 回の 'print it' で印刷できる場合は、お知らせください。

4

2 に答える 2

4

「印刷」とは何か、X と A とは何かを定義する必要があります。

「印刷」が「印刷」アクションの結果である場合、「印刷」は選択されたコードの戻り結果を印刷するため、一般的に X と A を返すことについて話していることになります。このように、X と A を表すオブジェクトについて考える必要があります。このオブジェクトに対して、printStringメソッドを定義したりprintOn:、結果を出力したりできます。または、少しごまかして、 を実行してポイントを返すこともできますX@A

実際にどこかで印刷することについて話している場合は、どこで印刷したいかについて詳しく説明する必要があります。トランスクリプトなどで印刷できますが、印刷したい内容を明示的にメッセージをトランスクリプトに送信する必要があります。

これを「デバッグ/テスト」の理由で使用したい場合は、「検査」を使用する方が簡単です。コードinspect内で、見たいオブジェクトにメッセージを送信できます。実行中にインスペクタが開き、このオブジェクトが表示されます。

また、規則に従い、変数名を小文字で始めることをお勧めします。

于 2014-01-17T00:58:18.763 に答える
3

ほとんどの Smalltalk 環境はウィンドウ環境に存在するため、Smalltalk には print() や println() などに相当するものはありません。出力を stdout または std エラーに書き込む方法はありますが、これは非常に方言固有です。

ほとんどの方言で stdout を何らかの形で置き換える場所の 1 つは、Transcript と呼ばれる場所/ストリーム/ウィンドウです。ほとんどの方言では、これは IDE を起動したときに最初に起動するウィンドウです。

そこに何かを書き込むには、次のようにします。

Transcript show: 'A=', A asString, ' ; X=', X asString.

(Smalltalk では、文字列とコレクションはコンマで連結されることに注意してください) 次のようにメッセージ cr を Transcript に送信することで、newLine を作成することもできます。

Transcript cr.

これはあなたの質問に答えていますか?

さらに学習/調査するためのヒント: TranscriptStream オブジェクトを保持する単なる変数です。show:そのストリームに文字列を書き込むメッセージです。asStringオブジェクトの文字列表現を返すメソッドです。

于 2014-01-29T07:38:05.463 に答える