我想找到一个Class的源及其方法(包括所有变量,本地,实例,类,类实例等)并将它们作为字符串或字符串集合返回。
我找到MethodNode>>sourceText
和CompiledMethod>>sourceCode
,但我不知道如何发送这些消息,或者它们是否是我要查找的消息。
关于如何使用类似AST
之类的代码导航Pharo语法的任何指针都将非常感激。
答案 0 :(得分:4)
首先询问您的对象的类,然后询问,例如,此类中定义的所有方法,然后收集每个方法的源代码:
'Pharo' class methods collect: [ :each | each sourceCode ]
您可以在Behavior
的超级类Class
的访问协议中找到类的其他属性的相关方法。
答案 1 :(得分:1)
除了Martin的答案之外,还有其他方法可以做到这一点,例如
(Object compiledMethodAt: #printString) sourceCode
将返回特定方法的源代码。
如果我们想要使用方法的AST导航语法:
( Object compiledMethodAt: #halt ) ast nodesDo:[ :node | node inspect].
查看RBProgramNode及其相关的子类,了解导航和处理源代码的可能性。
答案 2 :(得分:1)
根据您的确切需求,您应该注意超类中定义的特征,扩展方法和方法。