問題タブ [scala-macros]

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

scala - Scala マクロ: 特定の注釈のチェック

前の質問への回答のおかげで、Map各フィールド名をクラスの値にマップする を返すような関数マクロを作成できました。

したがって、このコマンド

戻り値

これは、TupleMapが生成される場所です (Travis Brown's answerを参照)。

@transientここで、注釈のあるフィールドを無視したいと思います。メソッドに@transient注釈があるかどうかを確認するにはどうすればよいですか?

上記のスニペットを次のように変更することを考えています

しかし、私は部分的に書く必要があるものを見つけることができませんexists。そこに渡すことができるように@transientするにはどうすればよいですか?Annotation

前もって感謝します!

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

scala - コンパイル時のscalaマクロエラー

実験にscalaマクロを使いたいです。しかし、マクロを使用するとエラーが発生しました。

エラー:

なんで?

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

scala - マクロが定義されているオブジェクトのメンバーへのマクロ アクセス

Foo初期値でインスタンス化する特性があるとしますi

後で a を呼び出し、secondMethodそれが次に呼び出すmyMacro

では、 (6)myMacroの初期値はどのように求めることができるでしょうか?i

c.prefixなどを使用した通常のコンパイル リフレクションでは成功しませんでしたc.eval(...)が、代わりに 2 つのプロジェクトの解決策を見つけました。

プロジェクト B:

プロジェクト A (プロジェクト B に依存):

を作成し、通常のインスタンス化または のようなマクロを使用しFooて値を設定できます。2 番目のアプローチでは、最初のコンパイルでコンパイル時に a をカスタマイズし、次に 2 番目のコンパイルで入力への応答をさらにカスタマイズできます (この場合)。何らかの方法で、「メタメタ」機能 (または「空想的」機能 ;-) を取得します。imakeFooFooi

通常、イントロスペクトするにはスコープ内に foo が必要ですi(たとえば、c.eval(...) を使用)。iしかし、オブジェクト内に値を保存するFooことで、いつでもアクセスでき、Fooどこでもインスタンス化できます。

私の質問

iこのダブル コンパイル ハッカーなしでサンプル マクロ内を見つけることはできますか?

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

overloading - Scala マクロ: メソッドのオーバーロード

次のように定義されている JSON からケース クラス オブジェクトを作成するコンバーター関数があります。

JSON を含む String から同じオブジェクトを作成することにも興味があります。したがって、上記のスニペットを次のように変更して、元のメソッドをオーバーロードしました。

しかし、次のエラー メッセージが表示されます。

したがって、次の構成の場合

マクロは、次の式を返そうとします。

最初のものは正しいですが、2 番目のものは代わりに T にアクセスしようとします。

マクロは基本的に次のように実装されます。

別のマクロを作成せずに、私が望むものを達成することは可能ですか?

よろしくお願いします!

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

scala - マクロとしての Scala getter/setter

セッター メソッドとゲッター メソッドをマクロとして実装するのに問題があります。次に例を示します。

ゲッターは機能しますが、セッターは機能しません。奇妙なエラーが発生します。

ふと、こんなことに気がつきました。モジュールに getVal() が存在しない場合

Module.value = "???"セッターとして読み取られなかったようです。

私の間違いですか?これを修正する方法は?

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

scala - Scala マクロ: 最上位オブジェクトの定義

type macrosスカラを探しました。しかし、例からオブジェクトを作成したい場合、エラーが発生しました:

コード:

スカラのバージョン: 2.10.2

From:タイプマクロ