我对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.
答案 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
会回答什么?