今晚有人问我这个问题。
我有两个相同类型的实例化案例类。
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?有什么想法吗?
答案 0 :(得分: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)
如果我理解正确......