問題タブ [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 に答える
457 参照

scala - マクロを介して任意の数のパラメータの関数に引数を渡す方法は?

Functionを分解し、 vparamsを取得しました。これで、次のように呼び出すことができます。

fは、コンパイル時に既知の任意の数のパラメーターです。

p.valueStackから関数fにts.countパラメータを渡す方法は?

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

scala - 複数のパラメーターとパラメーター リストの準引用符

準引用符は驚くべきものです。これにより、Scala でマクロを作成する手間が大幅に軽減されます。私の経験では、ほとんどの場合、期待どおりに正確に機能します。そして何より、Scala 2.10でプラグインとして利用できるようになりました。

この質問は、このブログ投稿を書いているときに遭遇した小さな問題に関するものです。数分見つけられるときに調べたいもののリストに載っていますが、他の誰かが私を打ち負かすことができる場合に備えて、ここに投稿し、同じ質問に遭遇している他の人を助けると思いました.

名前と型のペアのリストのリストがあるとします。

これらを次のようなツリーに変換したいと思います。

以下は問題なく動作します。

つまり、次のツリーを構築します。

これは、次のようなものを書くことができるはずであることを示唆しています:

または、もう少し単純に、1 つのパラメーター リストに複数のパラメーターを指定します。

どちらも機能しません。次のようなエラーが表示されます。

当然のことですが、 でパラメーターを定義するのではなく、型付き式を作成しているように、準クォーターにどのように見えるかがわかりますquoted。私が試してみようと思った明らかなことはどれもうまくいきませんでした( を追加= _する、準引用符を として明示的に入力するValDefなど)。

パラメータ定義を手動で作成できることはわかっています。

そして今、bazバージョン (1 つのパラメーター リストを含む) が機能します。

ただし、fooバージョン (複数のパラメーター リストを持つバージョン) ではありません。

そこで、ここで 2 つの質問があります。まず、quasiquotes を使用して、名前と型のペアをValDef、引用符で囲まれたパラメーター リストのコンテキスト外のパラメーターに変換するにはどうすればよいでしょうか? 次に、パラメーター定義のリストのリストを複数のパラメーター リストに変換するにはどうすればよいでしょうか。

いまいましいこと全体を手動の AST 構築に戻すのは簡単ですが (例については私の投稿を参照してください)、代わりに quasiquotes を使用できるようにしたいと考えています。

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

scala - SBT での Scala マクロとコンパイラ フレームワークの依存関係の解決

Scala コンパイラ プラグインを簡単に記述できるようにするためのフレームワークを作成しようとしています。したがって、私のプロジェクトはマクロパラダイスのマクロと、scala-compiler および scala-reflect ライブラリの両方に依存しています。

ここに記載されている手順に従って、SBT ビルド スクリプトを作成しました

そしてscalaVersion 2.11.0-SNAPSHOT、2.10.3-SNAPSHOT、2.10.3-RC1、2.10.2を使用してプロジェクトをコンパイルしましたが、どちらも機能しませんでした。これが私のsbtビルドスクリプトです:

scalaVersion 2.10-3-RC1 を使用すると、次のエラーが発生します。

scalaVersion 2.11.0-SNAPSHOT を使用すると、次のエラーが発生しました。

バージョン 2.10.3-SNAPSHOT を使用しているときに、次の結果が得られました。

バージョン 2.10.2 は、scala-library、scala-reflect、および 2.10.2 の依存関係をまったく解決できませんでした (2.10.3-RC1 など)。

私の質問は、コンパイラ API とマクロ API の両方を混在させて SBT で動作させることは可能ですか? もしそうなら、ビルド スクリプトの何が問題なのですか?

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

scala - 既知の DirectSubclasses の scala マクロと quasiquotes を使用した unapply/パターン マッチング

マクロを使用して、特定のタイプのすべてのサブクラスに一致する一致ステートメントを作成しようとしています。しかし、ケース クラスのフィールド値の抽出に問題があります。例えば:

Foobar が指定された場合、次のようなコードを作成したいと思います。

それは私がこれまでに得たものです:

このコードは Foo と Bar に一致しますが、右側に必要なフィールドを抽出できません。