2014-07-25 6 views
2

클래스의 소스를 찾고 (모든 변수, 로컬, 인스턴스, 클래스, 클래스 인스턴스 등)을 찾고 문자열 또는 문자열 모음으로 반환하고 싶습니다.클래스와 메소드 소스를 문자열로 반환하도록 객체에 요청하는 방법은 무엇입니까?

나는 MethodNode>>sourceTextCompiledMethod>>sourceCode을 찾았지만, 나는이 메시지를 보내는 방법이나 내가 찾고있는 메시지인지 전혀 모른다.

또한 AST과 같은 코드를 사용하여 Pharo 구문을 탐색하는 방법에 대한 모든 정보를 얻으실 수 있습니다. 개체의 클래스를 물어

+1

#defineition을 사용하여 _Class_ objects 및 _CompiledMethod_ objects 모두에서 소스 문자열을 가져올 수 있습니다. 그 외에는 내가 무엇을 요구하는지 이해하지 못한다 : – Uko

답변

4

먼저, 다음 예를 들어, 모든 메소드는이 클래스에 정의 된 질문 및 각 방법의 소스 코드 수집 :

'Pharo' class methods collect: [ :each | each sourceCode ] 

당신은에 대한 관련 방법을 찾을 수 있습니다 액세스 프로토콜Behavior에있는 클래스의 다른 속성, Class의 수퍼 클래스

+0

매우 좋은 대답 덕분에 :) – Kilon

+0

이것은 Gnu-Smalltalk에서 작동하지 않는 것 같습니다 : -/ – Camion

+0

GNU-Smalltalk에서'methodDictionary'는 수신자의 메소드 사전에 응답합니다 . – MartinW

1

마틴의 대답 또한 특정 방법에 대한 소스 코드를 반환합니다 예를

(Object compiledMethodAt: #printString) sourceCode 

을 위해이 일을하는 다른 방법도 있습니다.

(Object compiledMethodAt: #halt) ast nodesDo:[ :node | node inspect]. 

은 가지고 RBProgramNode과 관련 서브 클래스를 살펴 보자 탐색 및 처리 소스 코드 가능하다 어떤 맛 : 경우

우리는 방법의 AST를 사용하여 구문을 탐색합니다.

1

정확한 요구에 따라 수퍼 클래스에 정의 된 형질, 확장 방법 및 메소드에주의해야합니다.