[英]Accessing instance variables in an eventhandler with smalltalk
我對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,即使我初始化了此變量並將其通過設置方法傳遞給此類。 如果我用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.
您可以通過發送對象#instVarNamed:
直接訪問實例變量。 但是,這是一個私有方法,僅當您知道自己在做什么或用於調試時才應使用。
您將以以下方式在示例中使用#instVarNamed:
假設您的類的實例變量稱為theDigit
:
...
Transcript show: (myDigitClass instVarNamed: 'theDigit').
...
成績單將顯示有效存儲的值(例如nil
)。
這個問題很模糊。
您如何知道實例變量為NIL( nil
?)?
這是您在Transript中獲得的東西嗎?
注意, Transcript show:
idiom通常與String參數一起使用。
否則,它將asString發送到參數(至少在Squeak中)。
yourMorph yourDigitGetter asString
會回答什么?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.