4

私はこのコードを持っています (ProfStef から取得しましたが、任意のクラスの任意のメソッドにすることができます)。Squeak/Pharo によってオブジェクトが実行される順序をプログラムで取得するにはどうすればよいですか?

smalltalk のドキュメントから実行順序を知っていますが、構築中のアプリ内でこの情報が必要な場合はどうすればよいでしょうか。基本的に、これを使用して実行マップを作成し、コードの外観と実行方法の違いを示します。

PS。これを大規模に行う必要があります...手作業ではできません。

tutorial: aTutorialClass lesson: aSelector 
    | tutorial | 
    tutorial := aTutorialClass new. 
    self player tutorial: tutorial. 
    self tutorial: aTutorialClass lessonAt: (tutorial indexOfLesson: aSelector).

出力は、これに似たツリーになります

何かをする

anotherobject [何かをする]

最終オブジェクト [別のオブジェクト [これを行う] ]。// 元のコードはこのようになります。

4

2 に答える 2

5

Smalltalk コードの実行をきめ細かく制御できるAST インタープリターを確認してください。

基礎となる AST を実行形式として使用すると、現在実行されているコードをソース コードにマップするのは非常に簡単です。

于 2013-01-25T10:49:56.890 に答える
2

Pharo と他のいくつかの方言には、バイトコード インタープリターがあります。Pharo では、ContextPart class>>trace:on: を見てください。実行する例を次に示します。

ContextPart trace: [3 factorial]
于 2013-02-06T21:55:02.857 に答える