問題タブ [scala-macros]
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 マクロでパラメーター値にアクセスするときのコンパイルの問題
この最小限の例の呼び出しコードはコンパイルされているように見えますが (Eclipse Indigo SR2、Scala v2.10.20)、呼び出しコードを含むプロジェクトには赤いバツ印が付けられています (これをさらに診断する方法がわかりません)。クラス ファイルは生成されません。param.value を 1 などのリテラルに置き換えると、呼び出し元のコードがコンパイルされます。
これは既知の問題ですか? 回避策はありますか?
scala - マクロでの高階関数の受け渡しと呼び出し
Scalaマクロでパラメーター値にアクセスするときのコンパイルの問題に続いて、述語を適用するマクロを定義したいと思います。ステートメント fn = c.eval( pred ) が存在する場合、クライアント コードはコンパイルに失敗し、問題の性質については何も示されません。
マクロ内からこれを実行できるようにする必要がありますか?
scala - 複数のパラメーターとパラメーター リストの準引用符
準引用符は驚くべきものです。これにより、Scala でマクロを作成する手間が大幅に軽減されます。私の経験では、ほとんどの場合、期待どおりに正確に機能します。そして何より、Scala 2.10でプラグインとして利用できるようになりました。
この質問は、このブログ投稿を書いているときに遭遇した小さな問題に関するものです。数分見つけられるときに調べたいもののリストに載っていますが、他の誰かが私を打ち負かすことができる場合に備えて、ここに投稿し、同じ質問に遭遇している他の人を助けると思いました.
名前と型のペアのリストのリストがあるとします。
これらを次のようなツリーに変換したいと思います。
以下は問題なく動作します。
つまり、次のツリーを構築します。
これは、次のようなものを書くことができるはずであることを示唆しています:
または、もう少し単純に、1 つのパラメーター リストに複数のパラメーターを指定します。
どちらも機能しません。次のようなエラーが表示されます。
当然のことですが、 でパラメーターを定義するのではなく、型付き式を作成しているように、準クォーターにどのように見えるかがわかりますquoted
。私が試してみようと思った明らかなことはどれもうまくいきませんでした( を追加= _
する、準引用符を として明示的に入力するValDef
など)。
パラメータ定義を手動で作成できることはわかっています。
そして今、baz
バージョン (1 つのパラメーター リストを含む) が機能します。
ただし、foo
バージョン (複数のパラメーター リストを持つバージョン) ではありません。
そこで、ここで 2 つの質問があります。まず、quasiquotes を使用して、名前と型のペアをValDef
、引用符で囲まれたパラメーター リストのコンテキスト外のパラメーターに変換するにはどうすればよいでしょうか? 次に、パラメーター定義のリストのリストを複数のパラメーター リストに変換するにはどうすればよいでしょうか。
いまいましいこと全体を手動の AST 構築に戻すのは簡単ですが (例については私の投稿を参照してください)、代わりに quasiquotes を使用できるようにしたいと考えています。
scala - Scala Macro Paradise: マクロ注釈を使用して注釈の引数を取得するにはどうすればよいですか?
@specialized(Int) のような注釈を複製したいとしましょう。何かのようなもの:
注釈の引数 (例では Int) にアクセスする方法はありますか?