問題タブ [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 に答える
744 参照

scala - Scalaマクロ内でWeakTypeTagからApplyを生成することは可能ですか?

マクロにWeakTypeTag何らかのタイプがあり、次のようにコードを生成したいと考えています。

マクロの定義は次のようになります。

Select問題は、指定されたタイプをどのように取得するかです。

タイプを文字列に変換し、分割してから文字列のリストから"."作成するという回避策を使用できますSelectが、それはハックのようです。

Selectタイプタグから直接作成することは可能ですか?

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

scala - Scala 2.10 のマクロで添付ファイルを使用する

更新:私が望んでいることは不可能かもしれないと思うので、ここに私の推論 (およびいくつかの代替案) をブログに投稿しまし。私が間違っていると言われたらとてもうれしいです。


ファクトリ メソッドとマクロ実装を使用して、特性のインスタンスを作成したいとします。このメソッドは、マクロが読み取り、(コンパイル時に) 文字列から文字列へのマップに解析するリソースへのパスを引数として取ります。

その部分はすべてかなり簡単です。ここで、結果のマップを作成中のインスタンスに関連付けて、そのインスタンスに関連する後続のマクロ呼び出しで使用できるようにしたいとします。

マップをインスタンスのメンバーにしたり、実行時に何らかの形で存在させたりしたくありません。また、同じリソースを複数回解析したくありません。これが私が目指している種類のスケッチです:

これは、添付ファイルが役立つように設計されているようなものであるようです(ポインターについてはEugene Burmakoに感謝します)。次のように記述できる添付ファイルベースの実装があります。

Whereapply_implはマップをツリーにlookup_implアタッチし、そのアタッチメントを同じツリーから読み取ります。これをプレフィックスと見なします。残念ながら、これは多かれ少なかれ役に立ちませんfoo.lookup("x")。ただし、プレフィックス ツリーが単なる変数である場合には機能しないためですfoo

(私の実際の使用例でFooは extendsであり、代わりに のDynamicマクロ実装を提供しようとしていることに注意してください。ただし、それはここでは関係ありません。一般的なケースに関心があります。)selectDynamiclookup

添付ファイルを使用して必要なものを取得する方法はありますか? より適切な他のアプローチはありますか?

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

scala - Scala マクロ: 実行時に使用する TypeSymbols のリストを取得する

マクロを使用してパッケージの下の各クラスのListを返す方法はありますか?TypeSymbol

私が達成しようとしているのは、このリストと同等のものを与えるマクロを書くことです:

これが私のセットアップです:

という名前のパッケージがありfoo、その下でこれらが定義されています。

foo の下にある extends の下のクラスのすべての型シンボルを取得するマクロは次のFooTraitとおりです。

最初のprintln出力:

2番目のものは次のように出力されます:

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

これを機能させるにはどうすればよいですか?の代わりに何か他のものを書かなければならないと思いますIdentが、何がわかりませんでした。

Scala 2.10.2 を使用。

前もって感謝します!

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

scala - ケース クラスのフィールド名を表す値を持つオブジェクトを作成する

Scala マクロに慣れてきたところです。

次のことを行うにはどうすればよいですか(またはこれは可能ですか):

型が定義されていて利用可能である限り、定義がローカルであるかどうかは気にしません。