2012-12-29 5 views
1

저는 smalltalk에 익숙하지 않은 데요, 분명히 쉬운 문제가 저를 미치게 만듭니다. 내 자신의 클래스 모르 픽 클래스 inheritates하고 지금까지 작동 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 
    ] 

keyStroke의

덮어 쓰고 성적 증명서 나에게 내가 인스턴스 변수 myDigitClass 내가이 변수를 초기화하더라도 NIL입니다 하지만 키보드를 만들어 내 입력을 보여줍니다 setter-method를 통해이 클래스에 전달했습니다. 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:을 보내 직접 인스턴스 변수에 액세스 할 수 있습니다. 이것은 개인적인 방법이지만 당신이하고있는 일을 알고 있거나 디버깅을 위해서만 사용해야합니다.

당신은 클래스의 인스턴스 변수가 theDigit라고 가정하면, 귀하의 예제에서 다음과 같은 방법을 #instVarNamed:을 사용합니다 :

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

성적표를 효과적으로 저장 (예를 들어, nil) 값을 표시합니다.

+0

대답 해 주셔서 감사합니다.하지만 그것을 얻지는 않습니다. – norty

+0

죄송합니다. 더 자세한 내용을 포함하도록 답변을 업데이트했습니다. 도움이되는지 알려주세요. –

0

질문이 상당히 모호합니다 ...
어떻게 인스턴스 변수가 NIL (nil?)인지 어떻게 알 수 있습니까?
대본에 나오는 내용입니까?

일반적으로 Transcript show: 관용구는 String 인수와 함께 사용됩니다.
그렇지 않으면 인수에 asString을 보냅니다 (최소한 Squeak에서는).

yourMorph yourDigitGetter asString은 무엇을 대답합니까?

+0

요점은 위의 스 니펫에서 주석 처리 한 dropADigit/setADigit 메서드를 호출하려고한다는 것입니다. 하지만 그렇게하면 "MessageNotUnderstood"오류가 발생합니다. 그래서 나는 transcription에서 인스턴스 변수를 보여 주려고했지만 아무런 결과도 얻지 못했다. 그러나 다음의 메소드를 호출하면 :'getDigitMD ^ (myDigitClass) .'와 같이 결과를 작업 공간에 저장하고 이것을 보여 주면 " DigitClass "입니다. – norty

+0

"인쇄"메뉴를 사용할 때를 의미합니까? #printString과 다를 필요는없는 다른 메서드 인 #printString을 호출합니다. MessageNotUnderstood가있을 때 가장 좋은 방법은 Debugger를 여는 것입니다. 거기에서 Object의 모든 상태를 검사 할 수 있습니다. –

관련 문제