問題タブ [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.
scala - Scala マクロ: 特定の注釈のチェック
前の質問への回答のおかげで、Map
各フィールド名をクラスの値にマップする を返すような関数マクロを作成できました。
したがって、このコマンド
戻り値
これは、Tuple
のMap
が生成される場所です (Travis Brown's answerを参照)。
@transient
ここで、注釈のあるフィールドを無視したいと思います。メソッドに@transient
注釈があるかどうかを確認するにはどうすればよいですか?
上記のスニペットを次のように変更することを考えています
しかし、私は部分的に書く必要があるものを見つけることができませんexists
。そこに渡すことができるように@transient
するにはどうすればよいですか?Annotation
前もって感謝します!
scala - コンパイル時のscalaマクロエラー
実験にscalaマクロを使いたいです。しかし、マクロを使用するとエラーが発生しました。
エラー:
なんで?
scala - マクロが定義されているオブジェクトのメンバーへのマクロ アクセス
Foo
初期値でインスタンス化する特性があるとしますi
後で a を呼び出し、secondMethod
それが次に呼び出すmyMacro
では、 (6)myMacro
の初期値はどのように求めることができるでしょうか?i
c.prefix
などを使用した通常のコンパイル リフレクションでは成功しませんでしたc.eval(...)
が、代わりに 2 つのプロジェクトの解決策を見つけました。
プロジェクト B:
プロジェクト A (プロジェクト B に依存):
を作成し、通常のインスタンス化または のようなマクロを使用しFoo
て値を設定できます。2 番目のアプローチでは、最初のコンパイルでコンパイル時に a をカスタマイズし、次に 2 番目のコンパイルで入力への応答をさらにカスタマイズできます (この場合)。何らかの方法で、「メタメタ」機能 (または「空想的」機能 ;-) を取得します。i
makeFoo
Foo
i
通常、イントロスペクトするにはスコープ内に foo が必要ですi
(たとえば、c.eval(...) を使用)。i
しかし、オブジェクト内に値を保存するFoo
ことで、いつでもアクセスでき、Foo
どこでもインスタンス化できます。
私の質問
i
このダブル コンパイル ハッカーなしでサンプル マクロ内を見つけることはできますか?
overloading - Scala マクロ: メソッドのオーバーロード
次のように定義されている JSON からケース クラス オブジェクトを作成するコンバーター関数があります。
JSON を含む String から同じオブジェクトを作成することにも興味があります。したがって、上記のスニペットを次のように変更して、元のメソッドをオーバーロードしました。
しかし、次のエラー メッセージが表示されます。
したがって、次の構成の場合
マクロは、次の式を返そうとします。
最初のものは正しいですが、2 番目のものは代わりに T にアクセスしようとします。
マクロは基本的に次のように実装されます。
別のマクロを作成せずに、私が望むものを達成することは可能ですか?
よろしくお願いします!
scala - マクロとしての Scala getter/setter
セッター メソッドとゲッター メソッドをマクロとして実装するのに問題があります。次に例を示します。
ゲッターは機能しますが、セッターは機能しません。奇妙なエラーが発生します。
ふと、こんなことに気がつきました。モジュールに getVal() が存在しない場合
Module.value = "???"
セッターとして読み取られなかったようです。
私の間違いですか?これを修正する方法は?