問題タブ [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.
scala - 準引用符でさまざまなタイプのシンボルを接合するにはどうすればよいですか?
私はマクロを開発しており、その実装で T がマクロ関数の型パラメーターである weakTypeOf T を取得します。この具象型のメソッド定義から新しいクラス宣言ツリーまで、情報をつなぎ合わせたいと考えています。型引数の AST を取得できない (パターン マッチを行うため) ため、必ずシンボル ベースの API を使用する必要があります。私の質問は、インデントとメンバーの選択よりも多くの場所でシンボルを接合するにはどうすればよいですか?
たとえば、シンボルのリストを取得するには、次のようにします。
そして、情報を aq インターポレーターに接続するには、次のようにします。
シンボルを接合する方法 (ここ (PDF) で説明) によると、この種の接合を直接行うことはできません。これを達成する正しい方法は何ですか?
scala - Scala quasiquotes で型とデフォルト値を結合するにはどうすればよいですか?
更新されたケース クラスを提供する型プロバイダーを作成しようとしています。
タイプとデフォルト値をつなぎ合わせる (またはデフォルト値を省略する) にはどうすればよいですか?
私はもう試した:
単純に試してみましval valType = q"String"
たが、デフォルト値が見つからなかったかのようにエラーが発生します。not enough arguments for method apply
また、 として定義された val でスプライシングを試みましたtypeOf[String]
。 また、 のリストをValDef
my にスプライシングしようとしましたq"$mods class...
(このサイトのいくつかの同様の質問で a に行われたようにq"def...
) が、それぞれの場合にtyperがあります。エラー。
任意のヒント?ご覧いただきありがとうございます。
scala - マクロ準引用符で改行をエスケープするにはどうすればよいですか
例えば:
改行文字が解決されないため、これはエラーになります。
scala - scala マクロで適用された型の引用符を外す
scala コンソールでは、問題なく次のことができます。
そして、私が欲しいものを手に入れることができます: TheTypeThatIWantのコンテンツ
quasiquote 内でこれを実行しようとすると、一致例外が発生し、適用された型の内部型を取得する方法が見つかりませんでした。
私のコード:
しかし、私が得るのは:
どうすれば解決できますか?
ありがとうございました
編集 :
問題は quasiquotes だけでなく、 Trees で作業してもバグが発生します。
編集2:
あなたはそのようにしなければなりません:
scala - Scala マクロでの XML リテラルのマッチング
マクロを使用して Scala XML リテラルを変換したいと考えています。(XML を使用した文字列リテラルではなく、実際の XML リテラル)。私の知る限り、XML リテラルは実際には AST レベルで言語に組み込まれておらず、パーサーで脱糖されています。興味深いことに、これはうまくいきます:
しかし、明らかに、任意の xml をそのように一致させることは不可能であるため、これはまったく役に立ちません。何かのようなもの
パターン内で同じ変数を 2 回バインドする必要があるため、機能しません。
このような xml リテラル式のツリーを出力すると、実際には脱糖バージョンが得られます。例えば。
しかし、これを一致させようとすると失敗します:
私は混乱しています!私の質問は: scala マクロで任意の xml リテラルを確実に一致させる方法はありますか? さらに: 定数 xml の準引用符でサポートされているのに、desugared 値ではサポートされていないのはなぜですか?
scala - 引数のないコンストラクターをマクロ アノテーション付きの Scala ケース クラスに追加するにはどうすればよいですか?
私はこの質問に答えようとしています。
書く代わりに:
マクロ注釈を使用して展開すると思いました:
DefDef
そこで、次のように、マクロ注釈の impl で準引用符を使用して、新しいコンストラクターを単純な古いものとして追加しようとしました。
しかし、それはエラーを返します:called constructor's definition must precede calling constructor's definition
それを修正する方法はありますか?私は何を取りこぼしたか?
ご覧いただきありがとうございます - ジュリアン
scala - org.scalamacros:quasiquotes で競合するクロスバージョン サフィックス
プロジェクトの1 つでscala-picklingを使用しようとしています。ピクルスも使用しているように見えるマクロイドのビルドファイルを模倣しようとしましたが、このエラーが発生し続けます:sbt test
完全なビルド ログはこちらです。私は何を間違っていますか?これを修正するには、 build.sbtで何を変更すればよいですか? 2.10.x
また、との両方に対してライブラリをクロス コンパイルしてリリースできるはず2.11.x
です。