問題タブ [scala-macro-paradise]

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 に答える
113 参照

scala - マクロ注釈とは別に、即時型チェックを回避するマクロ作成方法は?

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

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

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

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

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

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

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

scala - scala マクロ注釈 (できれば準引用符を使用) によって、より高い種類の型の型エイリアスを定義する方法

オブジェクトをさまざまな定義で強化する scala マクロ アノテーションを開発しています ( cf. play form マクロ)。とりわけ、オブジェクトにタイプエイリアスが含まれていることを望みます

さまざまな数のワイルドカード引数用。

私はすでに単一のワイルドカード型の値を抽出しようとしました

抽出された値を型パラメーターのリストで使用することを望んでいました (例: q"type WFS = FS[..$tplist]")。それでも、上記のステートメントはエラーを引き起こします。

必要なツリーを構築するための別の (おそらくもっと簡単な) 方法はありますか?

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

scala - scala マクロ アノテーションを使用してオブジェクトに追加の特性を追加する

Macro Paradise を使用して Scala 2.10.3 を使用しています。オブジェクトに特性を追加しようとしているマクロ注釈があります。

拡張後、次のようなものが必要です。

Bazコンパイル スコープでアクセス可能な特性はどこにありますか。マクロ パラダイスを使用すると、ターゲット ツリーをきれいに分解できます。

bases は、既存の拡張機能を List of Ident(newTypeName("Bar")) の形式で保持します。

basesに追加のBazエントリを追加してツリーを再構築するだけで済みますが、問題は、ターゲットに「すでに」 が含まれている可能性があることBazです。この場合、私はそれを追加したくありません。私に与えられた用語の名前は短縮されています。それらをマクロ内の実際の型参照に変換する方法はありますか?

マクロで次のことを試しましたc.typeCheck(Ident(newTypeName("Baz")))が、次のエラーが発生します。

コンテキストを調べて、使用する他の明らかな方法があるかどうかを確認しましたが、飛び出すものはありません。

どんな助けでも大歓迎です!

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

scala - Scalaマクロを定義するときにシンボルまたはタイプからツリーに移動する方法はありますか

Scala マクロを定義するときに、Symbol または Type から Tree に移動する方法はありますか?

具体的には、コンパニオン オブジェクトでリテラルを検索するシナリオです。

scala コードでは、これは次のようになります。

マクロでは、Fred の WeakTypeTag にアクセスでき、それを使用してコンパニオンとその型シグネチャにアクセスできます。

しかし、リテラルまたはツリーにアクセスしてコンパニオン オブジェクトのリテラルを一致させる方法がわかりません。

これは可能ですか?任意のタイプまたはシンボルのツリーを取得するトリックはありますか?

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

scala - 有効なシンボルが計算された場合でも、typecheck が NoType を返すのはなぜですか?

続き: DefDef を Typecheck する方法

まず、私のマクロからのいくつかのスニペット:

次に、このクラスでマクロをフィードします。

はい...楽園の注釈マクロです。しかし、それはここでは関係ないと思います。

私を混乱させているのは、そのコードからのログ出力です。次のようになります。

型チェックが成功していることを考えると、予想されるすべてのシンボル情報が明確に得られます。

tpeメソッドがまだとして出てくるのはどうしてNoTypeですか?

0 投票する
3 に答える
1501 参照

scala - コードを印刷するScalaマクロ?

私はこのようなことをしたい:

使用例:

たとえば、 を呼び出した場合、またはfib(-20)のようなメッセージで例外をスローしたいAssertion failed: -20 > 0Assertation failed: i > 0