問題タブ [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 - Scala での型安全な String 補間
これに触発されて、Scala でタイプ セーフな文字列補間を (おそらくマクロを使用して) 行えるかどうか疑問に思っていました。
たとえば、私はこのようなものが欲しい
scala - 複数のクラスのマクロ注釈展開の順序を指定するにはどうすればよいですか?
2 つのマクロ アノテーション付きクラスがあり、展開中にフィールドが定義された後、一方が他方に依存するとします。
@Annotation
case class A(i: Int)
@Annotation
case class B(a: A)
A
の前に展開する必要がありますB
が、それらの定義の順序はそれを保証しません。
たとえば、次のB
ような無関係なコンパイル単位内のオブジェクトへの型パラメータとしての参照:
class X{val b = B(A(1))}
あるファイルとclass Y{Z[B]}
別のファイルで、
最初に展開されるためB
、コンパイルが失敗します。
この場合、マクロ展開の順序は何によって決まりますか? 希望の注文を強制する方法はありますか?
ご意見をお寄せいただきありがとうございます。
ジュリアン
scala - Java リフレクションを使用して、Scala マクロ アノテーションで追加されたメンバーの値を取得できますか?
MyRecord
コンパイル時にクラスに val "x" を追加する Scala マクロ アノテーションがあります。
MyRecord.class.getDeclaredField(x)
追加されたフィールドの値を取得するために使用する Java コードもいくつかあります。
javap MyRecord.class
追加されたフィールドが確かpublic
に であることを示していますが、Java コードはそれが であると不平を言ってエラーをスローしますprivate final
。
private final
Java リフレクションがメンバーを返すことを示す簡略化されたプロジェクトを次に示します。
Java コードを変更できないため、追加されたフィールドをpublic
Java リフレクションのように表示するにはどうすればよいですか?
ありがとう、
ジュリアン
scala - マクロ注釈から範囲位置を取得するには?
コードを計測するためにマクロ注釈を使用しています。いくつかの式の範囲位置を取得するにはどうすればよいですか?
計測マクロ:
範囲オプションを有効にしていますscalacOptions += "-Yrangepos"
私は現在、開始位置のみを取得しています:result: Map((75, 75) -> "foo", (80, 80) -> "bar")
scala - sbt が宣言された依存関係に間違ったバージョン番号を使用するのはなぜですか?
1 つのプラグインと 3 つの依存関係を使用する sbt ビルド ファイルがあります。
ただし、コンパイラは IScala-Macros のコンパイル中に次のエラーを表示しました。
2.10.4-SNAPSHOT に解決してほしくないので、これはバグのようですが、2.10.4 だけです。sbt のバグですか? そうでない場合、この SNAPSHOT はどこから来たのですか?
scala - quasiquote を使用してプライマリ コンストラクタ パラメータを抽出するにはどうすればよいですか
私は現在使用しています:
と の両方を抽出classDef
しparamss
ます。とにかく、これが冗長ではないということはありますか? paramss
おそらく、パターンマッチングから抽出したものclassDef: ClassDef
?
scala - Scala マクロのケース クラスに対して生成されたデフォルトの apply メソッドを置き換えることは可能ですか?
これはうまくいかないようです(2.11.1とマクロパラダイス2.0.1を使用)。ケースクラスで生成されたメソッドが抑制されるか、ツリーにあるので、それを取り除くことができることを望んでいました。これは厳しい制限ですか?
それを使用して:
結果:
エラー:(2, 2) メソッド apply が 2 回定義されています 競合するシンボルは両方ともファイル 'core/src/main/scala/Test.scala' @evis に由来します ^