問題タブ [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マクロを使用して部分関数を変換して適用する方法は?
部分関数を受け取り、関数のパターンに対していくつかの変換を実行し、それを特定の式に適用する Scala マクロを実装したいと考えています。
そのために、次のコードから始めました。
部分関数を分解し、applyOrElse 関数のケース定義を選択し、各定義に対して必要な変換を実行して、すべてを元に戻します。マクロは次のように呼び出されます。
残念ながら、これは期待どおりには機能しません。簡単な例でのマクロの使用
次のエラー メッセージが表示されます。
生成された部分関数を出力すると結果が得られるため、これは少し混乱します。
isDefinedAt メソッドを明確に定義しています。
ここで何が問題なのか、これを正しく行う方法はありますか?
scala - Scala マクロでパターン変数の型を判別することは可能ですか?
マクロの一部として、ケース定義のパターンを検査する必要があります。
パターン変数の型、またはパターン全体を判別する方法はありますか?
ポリモーフィック クラスと、トランスフォーマーを使用して値Data
のパターンを検査および変換するマクロを考えてみましょう。Data
パターン変数 $data の型を判別する方法、つまり、型パラメーター A がどのようにインスタンス化されたかを判別する方法はありますか?
別の質問では、値のツリーに関するこの問題について説明し、関数の使用を提案していc.typeCheck
ます。残念ながら、上記の例のパターン ツリーにメソッドを適用すると、typeCheck
メソッドが a をスローするため、これはパターンに対しては機能しないようです。TypeCheckException
scala - マクロを介して任意の数のパラメータの関数に引数を渡す方法は?
Functionを分解し、 vparamsを取得しました。これで、次のように呼び出すことができます。
fは、コンパイル時に既知の任意の数のパラメーターです。
p.valueStackから関数fにts.countパラメータを渡す方法は?
scala - Scala マクロ: Context#TypeTag を JavaUniverse#TypeTag に変換する
マクロを使用して、次のようなオブジェクトをインスタンス化するコードを生成したいと考えています。
これは、明らかに、次のようなものに変換されます。
次に、このクラスが通常のコードでインスタンス化されている場合、Scala コンパイラはTypeTag
インスタンスを自動的に提供します。
ただし、このクラスのいくつかのインスタンスを異なるT
s でインスタンス化するコードを生成したいと思います。具体的なT
s はユーザー入力に依存します。
シールされたトレイトのサブクラスを取得する方法を知ってc.WeakTypeTag[SubTest1]
いるので、c.WeakTypeTag[SubTest2]
マクロ コードでアクセスできます。TypeTag
しかし、メソッドによって期待される sに変換する方法がわかりませんExample.apply
。in()
ユニバース間で sを転送できると思われる方法を使用することを考えTypeTag
ましたが、宛先ミラーが必要であり、マクロ内からコンパイル時にランタイム ミラーを取得する方法がわかりません。
これまでのコードは次のとおりです(より明確にするために、いくつかの注釈と追加のステートメントを追加しました):