2012-07-11 25 views
0

可能重複:
Update operations on a Scala Case Class更新Scala的case類

這個問題今天晚上來找我。

我有兩個相同類型的實例化的case類。

case class Foo(a : Option[String], b : Option[String], c : Option[String]) 

讓我們稱之爲實例化的類A和B.

val a = Foo(a=Some("foo"), b=Some("bar"), c=Some("baz")) 
val b = Foo(a=None, b=Some("etch"), c=None) 

我想知道如果它能夠爲B在一次操作中通用的方式更新的情況下A類。

val c = b *oper* a // Foo(a=Some("foo"), b=Some("etch"), c=Some("baz")) 

參數被設置爲無忽略。理想情況下,該操作也應該是通用的,因此它可以處理任何類型的案例類。

我有一些直覺認爲,通過將該類轉換爲元組/列表並轉換回類,可能會使用Scalaz做到這一點 - 也許使用ApplicativeBuilder?有任何想法嗎?

+1

'A'和'B'不叫類,但實例或對象。 – ziggystar 2012-07-11 10:36:58

+0

代碼有問題。屬性a和c是字符串還是選項[字符串]? – pedrofurla 2012-07-11 12:00:42

回答

4
case class Foo(a:Option[String], b:Option[String], c:Option[String]) 

val a = Foo(a=Some("foo"), b=Some("bar"), c=Some("baz")) 
val b = Foo(a=None, b=Some("etch"), c=None) 

def op(a:Foo, b:Foo) = Foo(b.a.orElse(a.a), b.b.orElse(a.b), b.c.orElse(a.c)) 

op(a,b) 

如果我理解正確的話......

+0

將'op'中的參數重命名爲l和r會使代碼更具可讀性。 – pedrofurla 2012-07-11 12:03:00

+0

這是故意的:),使用與問題中相同的術語! – xiefei 2012-07-11 12:52:47