链式scala选项

我有配置器支持链式样式,如下所示:

val configurer = Configurer("init").propA("a").propB(3).propC("bla-bla")

这是我无法改变的第三方库.

我有我的

case class Config(propA: Option[String], propB: Option[Int], propC:
Option[String])

现在我需要使用给定的配置对象构建我的配置器,如果在配置中设置相应的值,则应该调用propX方法.

以功能方式实现这一目标的最佳方法是什么?

我不喜欢这个

val configurer = Configurer("init")
val withPropA = config.propA.map(configurer.propA).getOrElse(configure)
val withPropB = config.propB.map(configurer.propB).getOrElse(withPropA)
val withPropC = config.propC.map(configurer.propC).getOrElse(withPropB)

只是觉得应该有一种优雅的方式.

最佳答案 你可以用var来做,通常它是scala中坏代码的标志,但在这种情况下我认为它是绝对可以接受的.

def buildConfigurer(propA: Option[String], propB: Option[Int], propC: Option[String]) = {
   var configurer = new Configurer("init")
   propA.foreach(a => configurer = configurer.propA(a))
   propB.foreach(b => configurer = configurer.propB(b))
   propC.foreach(c => configurer = configurer.propC(c))
   configurer
}
点赞