我有配置器支持链式样式,如下所示:
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
}