問題タブ [hygiene]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
130 参照

rust - `quote` マクロはどのように補間を達成しますか?

quote(宣言型) マクロと(手続き型) マクロはどのようproc_quoteにローカル変数の補間を可能にしますか?

(宣言型) マクロは衛生的であるため、呼び出された環境にアクセスできないと予想されます。

0 投票する
1 に答える
71 参照

macros - Racket - 構文トランスフォーマーと通常のコードの両方で使用できる関数を定義する方法は?

Racket でマクロを定義するために構文トランスフォーマーを使用しています。構文を操作するのに役立つヘルパー関数をいくつか作成したいと考えています。ただし、構文トランスフォーマーの外部で定義した関数は、構文トランスフォーマー内では使用できません。たとえば、次のコードでは

エラー "my-function: reference to an unbound identifier at phase: 1; the Transformer environment" が表示されました。

いくつかの検索の後、次のコードを記述してmy-function、構文トランスフォーマー内で使用できるようにしました。

しかし問題は、my-function今回はシンタックス トランスフォーマー以外では使用できないことです。通常のコードでこれらのヘルパー関数をチェックしたい場合があるため、 function と同様に、構文トランスフォーマーの内側と外側の両方から呼び出すことができる必要がありますcadr。どうすればそれを達成できますか?

私の質問が Racket の構文モデル、特に「フェーズ レベル」の概念に関係していることは知っていますが、実際には理解できません。それを説明するわかりやすいチュートリアルを提供できれば、さらに感謝します.