我有一個函數,如下所示:應用所有過濾器的功能爲一個值
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' ... –
啊,所以你在談論一個'含半幺羣[生成器]'? –