ケース・クラスを使用して Scala でプログラムを作成していると、後で参照できるように、ケース・クラスの作成者をパラメータとして入れたいというパターンに繰り返し遭遇しました。ケースクラスに暗黙の値を設定することで、このパターンを捉えることができることを学びました
abstract class MessageCreator
case class SomeMessage(s:String)(implicit val creator:MessageCreator)
class MyCreator extends MessageCreator { implicit val creator = this}
class ACreator extends MyCreator { def newMessage = SomeMessage("hello") }
次に、ここの newMessage にcreator
は、ACreator 自体のインスタンスを参照するメンバーが含まれます。
今、同じことをするケースクラスがたくさんあります。(implicit val creator:MessageCreator)
私の質問は、そのようなケース クラスを定義するたびにコピー アンド ペーストせずに、このパターンをどのように繰り返すかということです。
暗黙の val を使用して抽象クラスを定義し、ケース クラスから継承しようとしましたが、Scala は、抽象クラスの暗黙の val がケース クラスで定義されていないと不平を言っていました。明らかに、case クラスは継承できません。
これがプログラムで実行できない場合は、マクロの作成を検討し始めるかもしれません (これは優れた解決策です)。ここで何も見逃していないことを確認したいと思います。