問題タブ [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.
scala - SBT プラグイン: 下流に伝播されない依存関係としてコンパイラ プラグインを追加する方法は?
私はSBTプラグインを書いています。Circe JSON ライブラリを使用したいのですが、Scala 2.10 の Macro Paradise コンパイラ プラグインが必要です。
通常、コンパイラ プラグインを にbuild.sbt
、SBT プラグインを に追加しproject/plugins.sbt
ます。
SBT プラグインをビルドすると、他のプラグインが依存関係になるため、それらを配置するbuild.sbt
と、SBT プラグインを使用するプロジェクトに伝播されます。
build.sbt
SBT プラグインに次のスニペットを挿入すると、次のようになります。
Paradise コンパイラ プラグインはダウンストリーム プロジェクトに伝播しますか?
scala - Scala マクロ: 生成されたクラスが実装されていないメンバーでコンパイルに失敗する
私の問題は、生成されたクラスのメンバーが実装されていると認識されないことです。これは Scala 2.10/2.11/2.12 用に構築されており、2.11 がデフォルトです。マクロパラダイス2.10を使用。
これの目的は、いくつかの特性をフリーズ可能としてマークし、データにアクセスするときにメソッドが呼び出されるscala.util.Try
フリーズ可能な各メソッドを受け取るそれぞれの実装クラスを生成することでした。get
フリーズできないメソッドはすべて で埋められthrow new IllegalStateException
ます。そして、特性によって定義されたメソッドを使用して、必要なデータが入力されたクラスのインスタンスを作成するカスタムfreeze
メソッドが作成されます。Frozen
特性に配置する注釈マクロを設定し、以下のように呼び出される内部クラスを持つコンパニオン オブジェクトを生成します。Frozen
trait でマクロを実行しようとすると、次のエラーが発生しますJavaInfo
。
特性自体は次のとおりです。
Frozen
構築中のツリーに実装が表示されているにもかかわらず、クラスによって何も実装されていないというエラーが発生します。
そのブランチをチェックアウトして を実行すると、失敗をテストできsbt scalaDebuggerApi/compile
ます。これにより、Scala 2.11 用のマクロ プロジェクトがコンパイルされ、続いて API 自体がコンパイルされます。
scala - 吸血鬼のメソッド、型プロバイダー マクロ、欠落している runtime.VolatileObjectRef
このgist で説明されている吸血鬼のメソッドのトリックを使用する型プロバイダー マクロを作成しようとしています。これは私の実装の最小モデルです:
これはばかげた例です。実際の実装では、このトリックを使用して、リフレクション呼び出しなしでアクセスできる派生型クラス インスタンスのバンドルを作成しようとします。class
実際のバージョンとこれの両方の問題は、関数で使用すると正常に動作しますが、またはobject
定義のルートで使用しようとするとコンパイラがクラッシュすることです。
これを修正するための助けは大歓迎です、ありがとう。