私は、ケース クラスを宣言することで得られるすべての同じメソッドを生成するマクロ アノテーション プロセッサを作成しましたが、ハッシュ コンシングを提供します。少しトリッキーでしたが、全体として、結果には非常に満足しています。ただし、apply
まだ解決していないメソッドの周りにいくつかの動作が見られます。
以前は、クラスFoo
がケース クラスであるか、手動で定義されたapply
メソッドを持っている場合、 のようなコードを書くことができましfoos.map(Foo)
た。ただし、メソッドがマクロ プロセッサによって生成されると、次のようなエラーが表示されます。
type mismatch;
[error] found : Foo.type
[error] required: String => ?
foos.map(Foo.apply)
コードをorとして書き直すだけでfoos.map(Foo(_))
機能しますが、この動作の違いの原因となる生成中のコードの違いを識別することができませんでした。
これは、Scala コンパイラーがシンボルをオブジェクト名などではなく型名に解決しようと熱心に取り組んでいるように思われますが、ここでより良い方法がある場合は、知っておくとよいでしょう。