2

これはClojure のフォローアップです: pre post functions

ゴール

すべての Clojure 関数に対して、実行されるpreおよびpost関数が必要です。

  • 関数が評価される直前
  • 関数が戻った直後

    ここで、*.clj ファイル内のすべての機能を実行したいと考えています。

    Clojure Compiler レベルでこれを行うことをお勧めします (これは学習課題でもあります)。

質問:

これを始めるにはどうすればよいですか?Clojure Compiler のソース コードのどの部分を読む必要がありますか? Clojure Compiler の内部について知っておくべきドキュメントやチュートリアルは何ですか?

ありがとう!

4

1 に答える 1

1

まず第一に、これは一般的に行うには少しクレイジーなことのように思えます。賢明な目的を達成するためのより良い方法がほぼ確実にあります (つまり、これは「XY 問題」を叫んでいます)。しかし、あなたがそれが単なる学習演習のためであると言う限り、それは問題ありません:-)

コンパイラをハッキングする前に、いくつかの戦略を考えてみてください。

  • 関数の作成時にラッピングを行う独自のdefnマクロを作成します。組み込みの defn ではなく、独自のバージョンの defn が使用されていることを確認する必要があることは明らかです。おそらく最も簡単な解決策です。
  • 実行時に (ロード後に) 名前空間をウォークし、すべての関数を同じ関数のラップされたバージョンに再定義します。少し面倒かもしれませんが、名前空間の理解を確実に深めてくれます :-)

コンパイラを本当にハッキングしたい場合、この変更を行う最も簡単な場所は、おそらくcore.cljdefnをハッキングすることです。

于 2012-05-29T03:16:26.390 に答える