問題タブ [scala-quasiquotes]

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 に答える
629 参照

scala - 準引用符でさまざまなタイプのシンボルを接合するにはどうすればよいですか?

私はマクロを開発しており、その実装で T がマクロ関数の型パラメーターである weakTypeOf T を取得します。この具象型のメソッド定義から新しいクラス宣言ツリーまで、情報をつなぎ合わせたいと考えています。型引数の AST を取得できない (パターン マッチを行うため) ため、必ずシンボル ベースの API を使用する必要があります。私の質問は、インデントとメンバーの選択よりも多くの場所でシンボルを接合するにはどうすればよいですか?

たとえば、シンボルのリストを取得するには、次のようにします。

そして、情報を aq インターポレーターに接続するには、次のようにします。

シンボルを接合する方法 (ここ (PDF) で説明) によると、この種の接合を直接行うことはできません。これを達成する正しい方法は何ですか?

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

scala - Scala quasiquotes で型とデフォルト値を結合するにはどうすればよいですか?

更新されたケース クラスを提供する型プロバイダーを作成しようとしています。

タイプとデフォルト値をつなぎ合わせる (またはデフォルト値を省略する) にはどうすればよいですか?

私はもう試した:

単純に試してみましval valType = q"String"たが、デフォルト値が見つからなかったかのようにエラーが発生します。not enough arguments for method apply

また、 として定義された val でスプライシングを試みましたtypeOf[String]。 また、 のリストをValDefmy にスプライシングしようとしましたq"$mods class...(このサイトのいくつかの同様の質問で a に行われたようにq"def...) が、それぞれの場合にtyperがあります。エラー

任意のヒント?ご覧いただきありがとうございます。

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

scala - マクロ準引用符で改行をエスケープするにはどうすればよいですか

例えば:

改行文字が解決されないため、これはエラーになります。

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

scala - scala マクロで適用された型の引用符を外す

scala コンソールでは、問題なく次のことができます。

そして、私が欲しいものを手に入れることができます: TheTypeThatIWantのコンテンツ

quasiquote 内でこれを実行しようとすると、一致例外が発生し、適用された型の内部型を取得する方法が見つかりませんでした。

私のコード:

しかし、私が得るのは:

どうすれば解決できますか?

ありがとうございました

編集 :

問題は quasiquotes だけでなく、 Trees で作業してもバグが発生します。

編集2:

あなたはそのようにしなければなりません:

0 投票する
2 に答える
511 参照

scala - Scala マクロでの XML リテラルのマッチング

マクロを使用して Scala XML リテラルを変換したいと考えています。(XML を使用した文字列リテラルではなく、実際の XML リテラル)。私の知る限り、XML リテラルは実際には AST レベルで言語に組み込まれておらず、パーサーで脱糖されています。興味深いことに、これはうまくいきます:

しかし、明らかに、任意の xml をそのように一致させることは不可能であるため、これはまったく役に立ちません。何かのようなもの

パターン内で同じ変数を 2 回バインドする必要があるため、機能しません。

このような xml リテラル式のツリーを出力すると、実際には脱糖バージョンが得られます。例えば。

しかし、これを一致させようとすると失敗します:

私は混乱しています!私の質問は: scala マクロで任意の xml リテラルを確実に一致させる方法はありますか? さらに: 定数 xml の準引用符でサポートされているのに、desugared 値ではサポートされていないのはなぜですか?

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

scala - 引数のないコンストラクターをマクロ アノテーション付きの Scala ケース クラスに追加するにはどうすればよいですか?

私はこの質問に答えようとしています。

書く代わりに:

マクロ注釈を使用して展開すると思いました:

DefDefそこで、次のように、マクロ注釈の impl で準引用符を使用して、新しいコンストラクターを単純な古いものとして追加しようとしました。

しかし、それはエラーを返します:called constructor's definition must precede calling constructor's definition

それを修正する方法はありますか?私は何を取りこぼしたか?

ご覧いただきありがとうございます - ジュリアン

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

scala - org.scalamacros:quasiquotes で競合するクロスバージョン サフィックス

プロジェクトの1 つでscala-picklingを使用しようとしています。ピクルスも使用しているように見えるマクロイドのビルドファイルを模倣しようとしましたが、このエラーが発生し続けます:sbt test

完全なビルド ログはこちらです。私は何を間違っていますか?これを修正するには、 build.sbtで何を変更すればよいですか? 2.10.xまた、との両方に対してライブラリをクロス コンパイルしてリリースできるはず2.11.xです。