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

scala - Scalaマクロを使用して部分関数を変換して適用する方法は?

部分関数を受け取り、関数のパターンに対していくつかの変換を実行し、それを特定の式に適用する Scala マクロを実装したいと考えています。

そのために、次のコードから始めました。

部分関数を分解し、applyOrElse 関数のケース定義を選択し、各定義に対して必要な変換を実行して、すべてを元に戻します。マクロは次のように呼び出されます。

残念ながら、これは期待どおりには機能しません。簡単な例でのマクロの使用

次のエラー メッセージが表示されます。

生成された部分関数を出力すると結果が得られるため、これは少し混乱します。

isDefinedAt メソッドを明確に定義しています。

ここで何が問題なのか、これを正しく行う方法はありますか?

0 投票する
0 に答える
150 参照

scala - Scala マクロでパターン変数の型を判別することは可能ですか?

マクロの一部として、ケース定義のパターンを検査する必要があります。

パターン変数の型、またはパターン全体を判別する方法はありますか?

ポリモーフィック クラスと、トランスフォーマーを使用して値Dataのパターンを検査および変換するマクロを考えてみましょう。Data

パターン変数 $data の型を判別する方法、つまり、型パラメーター A がどのようにインスタンス化されたかを判別する方法はありますか?

別の質問では、値のツリーに関するこの問題について説明し、関数の使用を提案していc.typeCheckます。残念ながら、上記の例のパターン ツリーにメソッドを適用すると、typeCheckメソッドが a をスローするため、これはパターンに対しては機能しないようです。TypeCheckException

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

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

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

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

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

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

scala - Scala マクロ: Context#TypeTag を JavaUniverse#TypeTag に変換する

マクロを使用して、次のようなオブジェクトをインスタンス化するコードを生成したいと考えています。

これは、明らかに、次のようなものに変換されます。

次に、このクラスが通常のコードでインスタンス化されている場合、Scala コンパイラはTypeTagインスタンスを自動的に提供します。

ただし、このクラスのいくつかのインスタンスを異なるTs でインスタンス化するコードを生成したいと思います。具体的なTs はユーザー入力に依存します。

シールされたトレイトのサブクラスを取得する方法を知ってc.WeakTypeTag[SubTest1]いるので、c.WeakTypeTag[SubTest2]マクロ コードでアクセスできます。TypeTagしかし、メソッドによって期待される sに変換する方法がわかりませんExample.applyin()ユニバース間で sを転送できると思われる方法を使用することを考えTypeTagましたが、宛先ミラーが必要であり、マクロ内からコンパイル時にランタイム ミラーを取得する方法がわかりません。

これまでのコードは次のとおりです(より明確にするために、いくつかの注釈と追加のステートメントを追加しました):