問題タブ [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.

0 投票する
3 に答える
822 参照

scala - Scala での型安全な String 補間

これに触発されて、Scala でタイプ セーフな文字列補間を (おそらくマクロを使用して) 行えるかどうか疑問に思っていました。

たとえば、私はこのようなものが欲しい

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

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、コンパイルが失敗します。

この場合、マクロ展開の順序は何によって決まりますか? 希望の注文を強制する方法はありますか?

ご意見をお寄せいただきありがとうございます。

ジュリアン

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

scala - Java リフレクションを使用して、Scala マクロ アノテーションで追加されたメンバーの値を取得できますか?

MyRecordコンパイル時にクラスに val "x" を追加する Scala マクロ アノテーションがあります。

MyRecord.class.getDeclaredField(x)追加されたフィールドの値を取得するために使用する Java コードもいくつかあります。

javap MyRecord.class追加されたフィールドが確かpublicに であることを示していますが、Java コードはそれが であると不平を言ってエラーをスローしますprivate final

private finalJava リフレクションがメンバーを返すことを示す簡略化されたプロジェクトを次に示します。

Java コードを変更できないため、追加されたフィールドをpublicJava リフレクションのように表示するにはどうすればよいですか?

ありがとう、

ジュリアン

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

scala - マクロ注釈から範囲位置を取得するには?

コードを計測するためにマクロ注釈を使用しています。いくつかの式の範囲位置を取得するにはどうすればよいですか?

計測マクロ:

範囲オプションを有効にしていますscalacOptions += "-Yrangepos"

私は現在、開始位置のみを取得しています:result: Map((75, 75) -> "foo", (80, 80) -> "bar")

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

scala - sbt が宣言された依存関係に間違ったバージョン番号を使用するのはなぜですか?

1 つのプラグインと 3 つの依存関係を使用する sbt ビルド ファイルがあります。

ただし、コンパイラは IScala-Macros のコンパイル中に次のエラーを表示しました。

2.10.4-SNAPSHOT に解決してほしくないので、これはバグのようですが、2.10.4 だけです。sbt のバグですか? そうでない場合、この SNAPSHOT はどこから来たのですか?

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

scala - quasiquote を使用してプライマリ コンストラクタ パラメータを抽出するにはどうすればよいですか

私は現在使用しています:

と の両方を抽出classDefparamssます。とにかく、これが冗長ではないということはありますか? paramssおそらく、パターンマッチングから抽出したものclassDef: ClassDef?

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

scala - Scala マクロのケース クラスに対して生成されたデフォルトの apply メソッドを置き換えることは可能ですか?

これはうまくいかないようです(2.11.1とマクロパラダイス2.0.1を使用)。ケースクラスで生成されたメソッドが抑制されるか、ツリーにあるので、それを取り除くことができることを望んでいました。これは厳しい制限ですか?

それを使用して:

結果:

エラー:(2, 2) メソッド apply が 2 回定義されています 競合するシンボルは両方ともファイル 'core/src/main/scala/Test.scala' @evis に由来します ^