我有一个函数,如下所示:应用所有过滤器的功能为一个值
def createBuilder(builder: InitialBuilder, name: Option[String], useCache: Boolean, timeout: Option[Long]): Builder = {
val filters: List[Builder => Option[Builder]] = List(
b => name.map(b.withName),
b => if (useCache) Some(b.withCache) else None,
b => timeout.map(b.withTimeout))
filters.foldLeft(builder)((b,filter) => filter(b).getOrElse(b))
}
从Builder => Option[Builder]
它定义3个滤波器函数(从可选参数转换)。我想将它们应用于现有的builder
值,因此在None
的情况下,我可以自行返回,保持不变。
上面的代码是我能想到的最好的代码,但它觉得我应该以某种方式能够用Monoid做到这一点 - 如果是None,返回identity
。
不幸的是,我无法弄清楚如何定义一个有意义。或者,如果有更好的/不同的方式来做到这一点?
我使用的猫,如果该事项。有任何想法吗?
*在没有的情况下返回身份*返回身份(。零)的幺半群?意思是如果你有一个'Monoid [String] .zero'你会返回一个空字符串,那好吗? –
@YuvalItzchakov嗯,我敢肯定,我的意思是应用'identity'函数返回初始'builder' ... –
啊,所以你在谈论一个'含半幺群[生成器]'? –