2

型指定されていないマクロが廃止さたため、初期型チェックを回避するマクロ バリアントの数が減少しました。

関連するリリース ドキュメントの理論的根拠は、暗黙のマクロとマクロ アノテーションの両方を代替手段として参照しています。

実際、マクロ注釈は宣伝どおりに機能しているようです。ただし、暗黙のマクロの例 (少なくとも私が理解しているもの) や、この状況で展開されている別のマクロの亜種を見つけることができませんでした。

繰り返しになりますが、質問は次のとおりです。マクロの注釈を除いて、即時の型チェックを回避するマクロ作成方法と、この点での違いは何ですか?

私の調査に拍車をかけた特定のユースケースは、次のようなものを変換しています(マクロ注釈で実現):

{
    @blah
    val x = {
            foo("a")
            bar()
    }
}

wherefooおよびbarは、マクロ適用前の現在のスコープ内のどこにも定義されていません。想定される使用例は DSL です。上記の例はコンテキストに対してのみ提供されているため、回答をこのシナリオに限定しないでください。

4

1 に答える 1

3

現時点 (Scala 2.11.0-M8、Macro Paradise 2.0.0-M3) では、展開前にマクロ引数の型チェックを行わない唯一のマクロ フレーバーは、マクロ パラダイスに実装されているマクロ アノテーションです。

Scala をスコープ インジェクションで拡張するという実験的なdsl-paradise の提案もあります。これにより、def マクロを制御された方法で完全に型指定することはできなくなりますが、現在は実装の初期段階にあるため、まだ使用できません。

公式の Scala における型指定されていないマクロの将来は、現時点では不明です。一方では、型指定されていないマクロが便利な場合があることを認識しています (たとえば、型プロバイダー、スコープ インジェクションなど)。 (27:40 から始まるScala マクロの哲学に関する私の StrangeLoop トークと、 scala-internalsでの最近のディスカッションを参照してください)。したがって、型付けされていないマクロがトランクに入る正確な形状を詳しく説明するには、将来の実験が必要です。

于 2014-01-27T07:38:04.677 に答える