是否有可能重构以下内容?
case class Foo(
a: List[String]) {
def +(s: String) = copy(a = s :: a)
}
case class Bar(
a: List[String],
b: Int) {
def +(s: String) = copy(a = s :: a)
}
答案 0 :(得分:1)
copy
无法提取到超类(如果这是你正在寻找的) - 它是一个编译器生成的方法。
答案 1 :(得分:1)
你可以通过使用(未记录的)copy$default$1
方法以及匹配{{1}的类型,以一种有点脆弱的方式进行大量反思来做到这一点方法,同时实现包含copy
和def a: List[String]
的特征。但这是一个坏主意;支持不完全存在(例如,如果你将它混合到一个非case-class中它会在运行时失败),它很慢,并且只保存少量的输入。
如果您有一个可以节省大量输入的情况,我建议您使用代码生成(即Scala代码编写Scala代码)以及额外的编译通道。