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
    ]

到目前为止有效,转录显示我在键盘上输入的内容,实例变量 myDigitClass 为 NIL,即使我初始化了这个变量并通过一个 setter 方法将它传递给这个类。如果通过我写的 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

您可以通过发送 object 直接访问实例变量#instVarNamed:。这是一种私有方法,只有在您知道自己在做什么或调试时才应使用。

假设您的类的实例变量被调用,您将#instVarNamed:在示例中使用以下方式theDigit

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

成绩单将显示有效存储的值(例如nil)。

于 2012-12-29T16:16:27.280 回答
0

这个问题很模糊......
你怎么知道实例变量是 NIL ( nil?) ?
这是你在成绩单中得到的吗?

请注意,Transcript show:惯用语通常与 String 参数一起使用。
否则,它将 asString 发送到参数(至少在 Squeak 中)。

yourMorph yourDigitGetter asString会回答什么?

于 2012-12-29T23:01:12.883 回答