Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala案例类,条件副本_Scala - Fatal编程技术网

Scala案例类,条件副本

Scala案例类,条件副本,scala,Scala,我定义了一个案例类和一个值: scala> case class N(a:Int, b:Int) defined class N scala> val nnn = N(2,3) nnn: N = N(2,3) 我想修改一个基于可选值的字段,t1和t2,类型选项为[Int],这就是我所做的: val nnn1 = t1.map( x => nnn.copy( a = x)).getOrElse(nnn) val nnn2 = t2.map( x => nnn1.copy

我定义了一个案例类和一个值:

scala> case class N(a:Int, b:Int)
defined class N

scala> val nnn = N(2,3)
nnn: N = N(2,3)
我想修改一个基于可选值的字段,t1和t2,类型选项为[Int],这就是我所做的:

val nnn1 = t1.map( x => nnn.copy( a = x)).getOrElse(nnn)
val nnn2 = t2.map( x => nnn1.copy( b = x)).getOrElse(nnn1)

有一种镜头/单片眼镜/Scalaz通用方法吗?

这是一种很好的方法

def someF(i:Int) = // a great computation with i :)

val na = t1.map(someF).getOrElse(nnn.a)

val newnnn = nnn.copy(a = na, b = t2.getOrElse(nnn.b)) 
如果您必须将someF应用于t1可能是一个好主意。
没有镜头。

t1.fold(nnn)(a1=>nnn.copy(a=a1))怎么样?没有镜头看起来很简单
nnn.copy(a=t1.getOrElse(nnn.a),b=t2.getOrElse(nnn.b))
看起来不错我最喜欢第二个选项,它非常简单。为什么不把它写下来作为一个正确的答案呢?