如何让对象将其类和方法源作为字符串返回?

时间:2014-07-25 17:43:02

标签: smalltalk pharo

我想找到一个Class的源及其方法(包括所有变量,本地,实例,类,类实例等)并将它们作为字符串或字符串集合返回。

我找到MethodNode>>sourceTextCompiledMethod>>sourceCode,但我不知道如何发送这些消息,或者它们是否是我要查找的消息。

关于如何使用类似AST之类的代码导航Pharo语法的任何指针都将非常感激。

3 个答案:

答案 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)

根据您的确切需求,您应该注意超类中定义的特征,扩展方法和方法。