使用smalltalk访问eventhandler中的实例变量

时间:2012-12-29 15:12:03

标签: event-handling smalltalk squeak

我对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是NIL,即使我初始化了这个变量并通过setter方法传递给了这个类。如果通过我写的getter-method访问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.

2 个答案:

答案 0 :(得分:0)

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

您可以通过以下方式在示例中使用#instVarNamed:,假设您的类的实例变量被称为theDigit

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

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

答案 1 :(得分:0)

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

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

yourMorph yourDigitGetter asString会回答什么?