簡體   English   中英

使用Smalltalk訪問事件處理程序中的實例變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM