問題タブ [scala-macro-paradise]

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 に答える
672 参照

scala - シール型のすべてのサブタイプに暗黙を提供する

私のアプリケーションには、シールされたトレイト階層の一部である複数のケース クラスとオブジェクトがあります。Akka でメッセージとして使用します。

これらのクラスは、websocket 経由で送信する前に、ユーザー フレンドリな形式に変換する必要があります。

以前は大きなパターン マッチを使用してそれらを 1 か所で変換していましたが、型の数が増えるにつれて、暗黙的な変換を使用したいと考えています。

次のように使用したいと思います。

convert2マクロを書かずに自動的に何かを生成する「魔法の」方法があるかどうか知りたいです。このようなマクロを提供するライブラリが既にあるのではないでしょうか?

0 投票する
0 に答える
45 参照

scala - フィールドのツリーからクラス ツリーにアクセスする

ケースクラスを強化するマクロを書きたいと思います。ケースクラスを次のように宣言すると:

case class User(int id, @tagged name)

私は、Tree注釈のみを持つこのクラスに何かを注入できるようにしたいと考えています。これまでのところ、囲んでいるクラスの にしか到達できSymbolませんでしたが、十分ではないようです (Eugene の回答はこちらを参照してください)。また、廃止予定の API も使用したくありませんc.enclosingClassClassDefパラダイス 2.1.0 (Scala 2.11) で親に到達する方法はありますか?

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

scala - astの用語名を置き換える簡単な方法

次のコードがあります。

このコードを使用して、次の使用例で変数名 ( ) を置き換えたいx:

それは単純な方法ですが、多くの式を持つ大きな方法がある場合、変数名を置き換える最も簡単な方法は何ですか (たとえば、から) x?y

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

scala - scala マクロから名前でクラス定義にアクセスする

単一のクラス引数を定義し、引数として提供されるクラスの実装に基づいてアタッチ先のクラスを変更する Scala マクロを作成しようとしています。

注釈から引数を抽出できる単純なマクロを作成することができました。その結果、完全なクラス名の文字列表現を含む TypeName オブジェクトが生成されます。

問題は、マクロの実装から A の定義にアクセスする必要があることです (具体的には、コンストラクターの引数が何であるかを確認したい)。

何らかの方法で TypeTag[A] にアクセス/作成する方法はありますか? クラス A の AST にアクセスする方法はありますか?

私が達成しようとしていることを説明するために、これは私が現在マクロ定義として持っているものです:

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

scala - import ステートメントを含む scala マクロが機能しない

次のような特性に注釈を付けています。

そして、次のような @ScreenModel の実装を取得しました。

だから、それで私は得る:

「コンパニオンのない最上位クラスは、同名のクラスまたはブロックにのみ展開できます」

しかし、AAA クラス内の AAA クラスの直前にインポートを移動すると、次のように機能します。

なんで?

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

scala - デフォルト引数によるマクロ注釈

Scala マクロ アノテーションからパラメーターを取得するでは、マクロ アノテーションからパラメーターを取得する方法について説明します。ただし、デフォルト値を持ついくつかのパラメーターがある場合:

私は書く必要があります(その質問への答えに基づいて)

のロジックは???非常に厄介になっているようです。位置パラメータと名前付きパラメータの両方を処理する必要があり、デフォルト値への単純なアクセスはありません。単純化する方法はありますか?

0 投票する
0 に答える
90 参照

scala - Scala マクロ アノテーションの展開順序

クラスが最初に変換される (および変更可能に@AnotherMacroなる) か、それともメソッドが変換されるか? これは保証されていますか?

0 投票する
0 に答える
88 参照

scala - メソッドでマクロ注釈を展開するときに、囲んでいるクラスのフィールドの型を見つける

ロギングを扱うマクロ注釈があり、SLF4J と Log4j2 の両方のロギングを処理したいと考えています。残念ながら、これにはloggerフィールドのタイプを見つける必要があります。注釈が他の質問のクラスにある場合、これを行う方法を知っています。しかし、アノテーションがメソッドにある場合はわかりません。これは私が試したことです:

これはコンパイルされますenclosingClassが (推奨されません)、この注釈を使用してクラスをコンパイルすると、illegal cyclic reference. 囲んでいるクラス全体の型チェックも機能しません。

それを行う方法はありますか?