例如,在Slick中,DDL
对象可以组成:
val t1: DDL = Table1.ddl
val t2: DDL = Table2.ddl
val compositeDDL = t1 ++ t2
如果我有一系列DDL
s,我想将它们缩减为DDL
个++
:
ddls.reduceLeft(_ ++ _)
如果序列为空,则不起作用。但是我也不能使用折叠,因为我可以使用没有零的起始值(这样的值是否有意义?)。
ddls.foldLeft( wot? )(_ ++ _)
所以我诉诸于:
if (ddls.isEmpty) None else Some(ddls.reduceLeft(_ ++ _))
这是我能解决这个问题的最好方法吗?
答案 0 :(得分:6)
您可以像这样使用reduceLeftOption
:
ddls.reduceLeftOption(_ ++ _)
它的工作原理如下:
if (ddls.isEmpty) None else Some(ddls.reduceLeft(_ ++ _))
您可以使用Seq
实施几乎所有foldLeft
方法。对于reduceLeftOption
:
ddls.foldLeft(None: Option[DDL]){ (a, e) => a.map{ _ ++ e }.orElse( Some(e) ) }
答案 1 :(得分:1)
使用reduceLeftOption
获取Option
包装结果:
ddls.reduceLeftOption(_ ++ _)