1

例如,在 Slick 中,DDL可以组合对象:

val t1: DDL = Table1.ddl
val t2: DDL = Table2.ddl
val compositeDDL = t1 ++ t2

如果我有一个DDLs 序列,我想将它们减少为DDL一个++

ddls.reduceLeft(_ ++ _)

如果序列为空,这将不起作用。但是我也不能使用 fold,因为我没有可以使用的起始值(这样的值有意义吗?)。

ddls.foldLeft( wot? )(_ ++ _)

所以我诉诸于:

if (ddls.isEmpty) None else Some(ddls.reduceLeft(_ ++ _))

这是我可以解决这个问题的最好方法吗?

4

2 回答 2

7

你可以这样使用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) ) }
于 2013-08-01T12:15:49.860 回答
1

用于reduceLeftOption获得Option包装的结果:

 ddls.reduceLeftOption(_ ++ _)
于 2013-08-01T12:16:51.843 回答