2012-12-29 146 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時,最好的辦法是打開調試器,從那裏你可以檢查對象的所有狀態。 –

相關問題