問題タブ [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 - コンパイラが推測する暗黙の変換と明示的に呼び出されたものを区別する方法は?
これら 2 つの同等の式を Scala マクロに渡すことを想像してみましょう。
- コンパイラが推測する暗黙の変換:
1+"foo"
- 明示的に呼び出された暗黙の変換:
any2stringadd(1)+"foo"
マクロ内でこれら 2 つを区別する方法はありますか?
class - Scalaでのシンボルのインポートとワイルドカードインポート
パッケージ、オブジェクト、クラスを表すシンボルのリストがあり、それらをマクロコンテキストにインポートしたいと思います。
パッケージとオブジェクトの場合、これはワイルドカードインポートを意味し、クラスの場合、これは「標準」インポートを意味します。
、、およびでList[Symbol]
構成されている場合some.package
、それらを適切にインポートするにはどうすればよいですか。また、「標準」インポートとワイルドカードインポートのどちらを使用する必要があるかを判断するにはどうすればよいですか。some.Class
some.Object
私の現在のアプローチはこれです:
パッケージ/モジュールのインポートは機能しますが、クラスのインポートは正しく見えますが機能しません。
scala - selectDynamicのマクロ実装でインスタンスメソッドを呼び出す
Sample#cap(String)
selectDynamicの次のマクロ実装で使用したいと思います。
出来ますか?
scala - WeakTypeTagまたはTypeが具象型を表しているかどうかを確認するには?
WeakTypeTag
orType
が具象型を表しているかどうかを確認するにはどうすればよいですか? これは、ユーザーが指定した型が具体的でない場合にコンパイルエラーを発生させるために使用できるマクロで特に役立ちます。
scala - リフレクションまたはマクロを使用するときにシンボルを確実に比較する方法は?
Symbol
scala マクロで、またはリフレクションを使用しているときに、2 つの s が等しいかどうかを確実に比較するにはどうすればよいですか? Symbol
2 つのオブジェクトが同じシンボル (同じクラス、同じローカル値または変数など) を表す場合、それらが==
演算子に関して等しいことが保証されていますか?
これは何のために必要ですか?Tree
ローカル値を参照する可能性のある式を表すマクロを持っています。このツリーを変換し、このローカル値へのすべての参照を他の値への参照に置き換えたいと考えています。
scala - ランタイムに渡すためにシンボルを具体化するにはどうすればよいですか?
Scala のマクロ コンテキストには、2 つの便利なメソッドがreifyType
ありreifyTree
ます。実行時に実行されると具体化されたType
orを返すコードを本質的に生成する とTree
です。
sで同様のことを達成する方法があるのだろうかSymbol
- ある種のreifySymbol
方法?
scala - Eclipse を使用して Scala マクロをデバッグする方法
Eclipse IDE を使用して Scala マクロ実装にブレークポイントを設定しようとして失敗しました
まず、Scala Macros Rock! 今までは Scala よりも Clojure を好んでいましたが、マクロについてはよくわかりません
関数の toString と関数自体を返すマクロを作成しようとしています。それが機能したら、適切な toString を使用して新しい関数を作成します。ああ幸せな日々。
しかし、マクロをデバッグできる必要があります。私は Eclipse (20110615-0604) と Scala (2.10.1) を使用しています。scala-compiler-2.10.1.jar をダウンロードすると、http://www.warski.org/blog/2012/12/starting-with-scala-macros-a-short-tutorial/ のコードが機能するようになりました。簡単なマクロもいくつか書いています。マクロはEclipseプロジェクト「ScalaMacro」にあり、それらを使用するコードは別のプロジェクト「HelloScalaMacro」にあります
私は今それらをデバッグしたいと思います
http://docs.scala-lang.org/overviews/macros/overview.htmlの指示に従って、scala.tools.nsc.Main をエントリ ポイントとして実行時の構成を作成しました。-cp HelloScala.scala を追加しました。構成を実行すると、実際にコードがコンパイルされているように見えます (エラーを入力すると、エラーが正しく報告されます)。
残念ながら、この手順では、マクロ実装のブレークポイントによって Eclipse が一時停止する必要があることを暗示しています。そうではありません。
私はいつものように Eclipse/Scala マクロ/デバッグ/ブレークポイントを Google 検索し、scala-macro タグのすべての stackoverflow の質問を読み、見つけたすべての Eclipse 設定でいろいろ試しました。
それで、ブレークポイントを設定する方法を知っている人がいる場合は、その方法を教えていただけますか:それはEclipseバージョン/ scalaバージョン/ ...の問題ですか?