Scala 折叠/缩小,带可能为空的序号,无零值
例如,在Slick中,Scala 折叠/缩小,带可能为空的序号,无零值,scala,Scala,例如,在Slick中,DDL对象可以由以下部分组成: val t1: DDL = Table1.ddl val t2: DDL = Table2.ddl val compositeDDL = t1 ++ t2 如果我有一个DDLs序列,我想用++将它们简化为一个DDL: ddls.reduceLeft(_ ++ _) 如果序列为空,则此操作无效。但我也不能使用fold,因为我不能使用零起始值(这样的值有意义吗?) 因此,我采取了如下措施: if (ddls.isEmpty) None els
DDL
对象可以由以下部分组成:
val t1: DDL = Table1.ddl
val t2: DDL = Table2.ddl
val compositeDDL = t1 ++ t2
如果我有一个DDL
s序列,我想用++
将它们简化为一个DDL
:
ddls.reduceLeft(_ ++ _)
如果序列为空,则此操作无效。但我也不能使用fold,因为我不能使用零起始值(这样的值有意义吗?)
因此,我采取了如下措施:
if (ddls.isEmpty) None else Some(ddls.reduceLeft(_ ++ _))
这是我解决这个问题的最好方法吗?您可以这样使用
reduceLeftOption
:
ddls.reduceLeftOption(_ ++ _)
if (ddls.isEmpty) None else Some(ddls.reduceLeft(_ ++ _))
它的工作原理与此完全相同:
ddls.reduceLeftOption(_ ++ _)
if (ddls.isEmpty) None else Some(ddls.reduceLeft(_ ++ _))
您可以使用foldLeft
实现几乎所有Seq
方法。对于reduceLeftOption
:
ddls.foldLeft(None: Option[DDL]){ (a, e) => a.map{ _ ++ e }.orElse( Some(e) ) }
您可以这样使用
reduceLeftOption
:
ddls.reduceLeftOption(_ ++ _)
if (ddls.isEmpty) None else Some(ddls.reduceLeft(_ ++ _))
它的工作原理与此完全相同:
ddls.reduceLeftOption(_ ++ _)
if (ddls.isEmpty) None else Some(ddls.reduceLeft(_ ++ _))
您可以使用foldLeft
实现几乎所有Seq
方法。对于reduceLeftOption
:
ddls.foldLeft(None: Option[DDL]){ (a, e) => a.map{ _ ++ e }.orElse( Some(e) ) }
使用
reduceLeftOption
获得选项
包装结果:
ddls.reduceLeftOption(_ ++ _)
使用
reduceLeftOption
获得选项
包装结果:
ddls.reduceLeftOption(_ ++ _)
哦,从2.8开始就有了。羞耻脸哦,从2.8开始就有了。丢脸