1

확인 방법을 기존의 이해되지, 그래서 다음과 같이이다 :메시지

receiver selectors 

반환

#(#expression #expression: #mondrianLabel #accept: #name) 

그러나

receiver expression 

MessageNotUnderstood를 throw합니다.

이 문제를 해결하는 방법과 그 원인은 무엇입니까?

+1

'statement'를'receiver'로 변경하여 질문을 명확히 해줄 것이라고 생각합니다. 이것은 더 적절한 이름입니다. –

답변

4

아마도 expression 메시지를 해당 클래스의 인스턴스 대신 클래스에 보냈을 것입니다.

receiver selectors의 결과가 #(#expression #expression: #mondrianLabel #accept: #name) 인 경우 receiver이 대부분 클래스 일 수 있습니다. 메시지 #selectors은 클래스 Behavior에 구현되고 클래스의 인스턴스 메서드 선택기를 반환합니다. 즉, 클래스 (또는 그 하위 클래스)의 인스턴스는 나열된 메시지를 이해합니다. 당신이 receiver expression을 평가하는 경우

따라서, 당신은 메시지 #expression가 당신의 receiver 변수의 값입니다 클래스의 인스턴스에 정의되어 있기 때문에 메시지가 예외를 이해하지 얻을 것이다.

+0

감사합니다. 나는 질문을 게시 한 후 5 분 후에 그것을 알아 냈다. 그러나 그 전에 나는 조사하는데 약 30 분을 보냈다 ... – Uko