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

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

scala - Scala マクロでパラメーター値にアクセスするときのコンパイルの問題

この最小限の例の呼び出しコードはコンパイルされているように見えますが (Eclipse Indigo SR2、Scala v2.10.20)、呼び出しコードを含むプロジェクトには赤いバツ印が付けられています (これをさらに診断する方法がわかりません)。クラス ファイルは生成されません。param.value を 1 などのリテラルに置き換えると、呼び出し元のコードがコンパイルされます。

これは既知の問題ですか? 回避策はありますか?

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

scala - 生成されたマクロ メソッドで「this」を使用する

これは私の前の質問のフォローアップです。

以下のコードのようなものが機能することを望みます。マクロ生成メソッドを生成できるようにしたい:

生成されたメソッド自体の実装がマクロを使用している場合 ( 「吸血鬼」メソッド):

このコードは、次の場合にコンパイルに失敗します:

this.otherMethod私はこれが何を意味するのかを解読するのが本当に苦手ですが、吸血鬼メソッドの本体で参照できないという事実に関連していると思われます. それを行う方法はありますか?

これが機能する場合、次のステップは、次のような実装を行うことですotherMethod

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

scala - マクロでの高階関数の受け渡しと呼び出し

Scalaマクロでパラメーター値にアクセスするときのコンパイルの問題に続いて、述語を適用するマクロを定義したいと思います。ステートメント fn = c.eval( pred ) が存在する場合、クライアント コードはコンパイルに失敗し、問題の性質については何も示されません。

マクロ内からこれを実行できるようにする必要がありますか?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

scala - Scala Macro Paradise: マクロ注釈を使用して注釈の引数を取得するにはどうすればよいですか?

@specialized(Int) のような注釈を複製したいとしましょう。何かのようなもの:

注釈の引数 (例では Int) にアクセスする方法はありますか?