0

重複の可能性:
Scala ケース クラスの更新操作

この質問は今晩私に来ました。

同じタイプのインスタンス化された 2 つのケース クラスがあります。

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)

ケースクラスAをBで1回の操作で一般的な方法で更新できるかどうか疑問に思っています。

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

None として設定されているパラメータは無視されます。理想的には、操作もジェネリックである必要があるため、どのタイプのケース クラスでも動作できます。

最初にクラスをタプル/リストに変換し、操作が完了したらクラスに戻すことで、Scalaz でこれを行うことができるかもしれないという直感があります - おそらく ApplicativeBuilder を使用しますか? 何か案は?

4

1 に答える 1

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)

私があなたを正しく理解していれば......

于 2012-07-11T10:10:02.157 に答える