1

私は smalltalk の初心者で、明らかに簡単な問題に頭がおかしくなりました。自分のクラスは Morphic クラスを継承し、keyStroke を上書きします

keyStroke: anEvent
Transcript show: myDigitClass.
(((anEvent keyValue) > 47) and: ((anEvent keyValue) < 58)) ifTrue: [
    "myDigitClass dropADigit"
    "myDigitClass setADigit: (anEvent keyValue) asCharacter."
    Transcript show: (anEvent keyValue) asCharacter
    ]

それはこれまでのところ機能し、Transcript はキーボードで行った入力を示しています、インスタンス変数 myDigitClass は、この変数を初期化し、setter メソッドを介してこのクラスに渡しましたが、NIL です。私が書いた getter メソッドで myDigitClass にアクセスすると、動作します。

showPane メソッドを呼び出し、入力パラメーター digitMD をインスタンス Var に割り当てます。

showPane: digitMD
  |pane|
  myDigitClass := digitMD.

  pane := DigitMorph new.
  pane extent: 340@340.
  ^pane openInWorld.

そして、ワークスペースで次のことを行います。

 myDigitClass := DigitClass new.
 myTest := DigitMorph new.
 myTest showPane: myDigitClass.
4

2 に答える 2

0

オブジェクトを送信することにより、インスタンス変数に直接アクセスできます#instVarNamed:。ただし、これはプライベートメソッドであり、実行していることを知っている場合、またはデバッグのためにのみ使用する必要があります。

#instVarNamed:この例では、クラスのインスタンス変数が次のように呼び出されると仮定して、次のように使用しtheDigitます。

...
Transcript show: (myDigitClass instVarNamed: 'theDigit').
...

トランスクリプトには、効果的に保存された値が表示されます(例nil)。

于 2012-12-29T16:16:27.280 に答える
0

質問は非常に漠然としています...インスタンス変数が NIL ( ?)
であることをどうやって知ることができますか? それはTransriptで得られるものですか?nil

Transcript show:イディオムは通常、文字列引数とともに使用されることに注意してください。
それ以外の場合は、asString を引数に送信します (少なくとも Squeak では)。

とはどういう意味yourMorph yourDigitGetter asStringですか?

于 2012-12-29T23:01:12.883 に答える