是否有可能重構以下內容?重構複製功能
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)
}
是否有可能重構以下內容?重構複製功能
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)
}
copy
不能被提取到超一流的(如果這是你在找什麼) - 這是一個編譯器生成的方法。
我意識到這一點,但是想知道是否可以採取其他方法來糾正這種情況下的重複。 – 2010-12-10 17:15:43
您與反射的一個巨大的量可以做到這一點,在一個有些脆弱方式中,通過使用(未記錄的)copy$default$1
方法,以及匹配的類型關閉copy
方法,以及具有執行的性狀,包括def a: List[String]
和def a_=(a0: List[String])
。但這是一個糟糕的主意;支持並不完全存在(例如,如果您將它混合到非案例類中,它將在運行時失敗),速度很慢,並且只節省少量的輸入。
如果您有一個可以節省大量打字的情況,我鼓勵您使用代碼生成代替(即編寫Scala代碼的Scala代碼)並附加一個用於編譯的傳遞。
以什麼方式?什麼似乎是問題? – 2010-12-10 16:44:30
@Daniel重複'def +(s:String)= copy(a = s :: a)', 我想 – 2010-12-10 16:49:41
重複的代碼。本身不是問題。 – 2010-12-10 17:14:30