2012-12-29 150 views
1

我对tinytalk很新颖,一个显然很容易的问题让我发疯。 从Morphic环类我自己的类能继承并覆盖keyStroke的用smalltalk访问事件处理程序中的实例变量

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-method访问myDigitClass,我写了它。

我调用showPane方法并将输入参数digitMD分配给实例Var。

showPane: digitMD 
    |pane| 
    myDigitClass := digitMD. 

    pane := DigitMorph new. 
    pane extent: [email protected] 
    ^pane openInWorld. 

而且在我做了以下工作区:

myDigitClass := DigitClass new. 
myTest := DigitMorph new. 
myTest showPane: myDigitClass. 
+0

你在用什么方言? Pharo,Squeak,VW,VA ......? –

+0

我与Squeak一起工作 – norty

+0

在阅读您最后的评论之后,我想看看您初始化变量的代码以及您用于声明类的代码(实例变量的定义位置)。 –

回答

0

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

你会在你的榜样使用#instVarNamed:下面的方式,假设你的类的实例变量称为theDigit

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

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

+0

谢谢你的回答,但是我不明白。 – norty

+0

对不起。我更新了我的答案以包含更多细节。让我知道这是否有帮助。 –

0

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

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

yourMorph yourDigitGetter asString会回答什么问题?

+0

关键是我想调用我在上面的代码片段中注释掉的dropADigit/setADigit方法。但是,如果我这样做,我会得到一个“MessageNotUntoodtood”错误。所以我试图在转录本中显示实例变量,并且我得到一个零,但是如果调用以下方法:'getDigitMD ^(myDigitClass).'并将结果保存在工作区中并显示给我,它会打印出“一个DigitClass“。 – norty

+0

你的意思是当你使用“打印它”菜单?这将调用一个不同的方法,#printString,不一定与#asString相同。当你有一个MessageNotUnderstood时,最好的办法是打开调试器,从那里你可以检查对象的所有状态。 –

相关问题