当我在 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 类不能被继承。
如果这不能以编程方式完成,我可能会开始考虑编写一个宏(这将是一个很好的解决方案)。我想确保我在这里没有遗漏任何东西。