重构复制功能

时间:2010-12-10 15:39:18

标签: scala

是否有可能重构以下内容?

  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)    
  }

2 个答案:

答案 0 :(得分:1)

copy无法提取到超类(如果这是你正在寻找的) - 它是一个编译器生成的方法。

答案 1 :(得分:1)

可以通过使用(未记录的)copy$default$1方法以及匹配{{1}的类型,以一种有点脆弱的方式进行大量反思来做到这一点方法,同时实现包含copydef a: List[String]的特征。但这是一个坏主意;支持不完全存在(例如,如果你将它混合到一个非case-class中它会在运行时失败),它很慢,并且只保存少量的输入。

如果您有一个可以节省大量输入的情况,我建议您使用代码生成(即Scala代码编写Scala代码)以及额外的编译通道。