問題タブ [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マクロ内でWeakTypeTagからApplyを生成することは可能ですか?
マクロにWeakTypeTag
何らかのタイプがあり、次のようにコードを生成したいと考えています。
マクロの定義は次のようになります。
Select
問題は、指定されたタイプをどのように取得するかです。
タイプを文字列に変換し、分割してから文字列のリストから"."
作成するという回避策を使用できますSelect
が、それはハックのようです。
Select
タイプタグから直接作成することは可能ですか?
scala - Scala 2.10 のマクロで添付ファイルを使用する
更新:私が望んでいることは不可能かもしれないと思うので、ここに私の推論 (およびいくつかの代替案) をブログに投稿しました。私が間違っていると言われたらとてもうれしいです。
ファクトリ メソッドとマクロ実装を使用して、特性のインスタンスを作成したいとします。このメソッドは、マクロが読み取り、(コンパイル時に) 文字列から文字列へのマップに解析するリソースへのパスを引数として取ります。
その部分はすべてかなり簡単です。ここで、結果のマップを作成中のインスタンスに関連付けて、そのインスタンスに関連する後続のマクロ呼び出しで使用できるようにしたいとします。
マップをインスタンスのメンバーにしたり、実行時に何らかの形で存在させたりしたくありません。また、同じリソースを複数回解析したくありません。これが私が目指している種類のスケッチです:
これは、添付ファイルが役立つように設計されているようなものであるようです(ポインターについてはEugene Burmakoに感謝します)。次のように記述できる添付ファイルベースの実装があります。
Whereapply_impl
はマップをツリーにlookup_impl
アタッチし、そのアタッチメントを同じツリーから読み取ります。これをプレフィックスと見なします。残念ながら、これは多かれ少なかれ役に立ちませんfoo.lookup("x")
。ただし、プレフィックス ツリーが単なる変数である場合には機能しないためですfoo
。
(私の実際の使用例でFoo
は extendsであり、代わりに のDynamic
マクロ実装を提供しようとしていることに注意してください。ただし、それはここでは関係ありません。一般的なケースに関心があります。)selectDynamic
lookup
添付ファイルを使用して必要なものを取得する方法はありますか? より適切な他のアプローチはありますか?
scala - Scala マクロ: 実行時に使用する TypeSymbols のリストを取得する
マクロを使用してパッケージの下の各クラスのList
を返す方法はありますか?TypeSymbol
私が達成しようとしているのは、このリストと同等のものを与えるマクロを書くことです:
これが私のセットアップです:
という名前のパッケージがありfoo
、その下でこれらが定義されています。
foo の下にある extends の下のクラスのすべての型シンボルを取得するマクロは次のFooTrait
とおりです。
最初のprintln
出力:
2番目のものは次のように出力されます:
しかし、次のエラー メッセージが表示されます。
これを機能させるにはどうすればよいですか?の代わりに何か他のものを書かなければならないと思いますIdent
が、何がわかりませんでした。
Scala 2.10.2 を使用。
前もって感謝します!
scala - ケース クラスのフィールド名を表す値を持つオブジェクトを作成する
Scala マクロに慣れてきたところです。
次のことを行うにはどうすればよいですか(またはこれは可能ですか):
型が定義されていて利用可能である限り、定義がローカルであるかどうかは気にしません。