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

scala - マクロ アノテーションによって生成されたコンパニオン クラスの適用メソッドが解決されない

私は、ケース クラスを宣言することで得られるすべての同じメソッドを生成するマクロ アノテーション プロセッサを作成しましたが、ハッシュ コンシングを提供します。少しトリッキーでしたが、全体として、結果には非常に満足しています。ただし、applyまだ解決していないメソッドの周りにいくつかの動作が見られます。

以前は、クラスFooがケース クラスであるか、手動で定義されたapplyメソッドを持っている場合、 のようなコードを書くことができましfoos.map(Foo)た。ただし、メソッドがマクロ プロセッサによって生成されると、次のようなエラーが表示されます。

foos.map(Foo.apply)コードをorとして書き直すだけでfoos.map(Foo(_))機能しますが、この動作の違いの原因となる生成中のコードの違いを識別することができませんでした。

これは、Scala コンパイラーがシンボルをオブジェクト名などではなく型名に解決しようと熱心に取り組んでいるように思われますが、ここでより良い方法がある場合は、知っておくとよいでしょう。