Scala 如何对主功能隐藏配置管理?

Scala 如何对主功能隐藏配置管理?,scala,functional-programming,pureconfig,Scala,Functional Programming,Pureconfig,我的切入点如下: def main(args: Array[String]): Unit = { pureconfig.loadConfig[Conf] match { case Right(conf) => doStuff(conf) case Left(fail) => lectureUserAboutStuff(fail) } } def main(args: Array[String]): Unit = { doStuff(conf)(failH

我的切入点如下:

def main(args: Array[String]): Unit = {
  pureconfig.loadConfig[Conf] match {
    case Right(conf) => doStuff(conf)
    case Left(fail) => lectureUserAboutStuff(fail)
  }
}
def main(args: Array[String]): Unit = {
  doStuff(conf)(failHandler)
}
看来我的程序的主要目的是加载一个配置,这是不正确的,我的程序的核心是
doStuff

如何表现这一点并隐藏隐藏配置

我想要这样的东西:

def main(args: Array[String]): Unit = {
  pureconfig.loadConfig[Conf] match {
    case Right(conf) => doStuff(conf)
    case Left(fail) => lectureUserAboutStuff(fail)
  }
}
def main(args: Array[String]): Unit = {
  doStuff(conf)(failHandler)
}

很明显,故障处理和配置加载只是附件。

从程序的
main
方法使用PureConfig的最常见方法之一是在出现错误时快速失败。API提供了
LoadConfigorStrow
,如果加载成功,则返回配置,否则抛出
ConfigReaderException

导入pureconfig.LoadConfigorStrow
def main(参数:数组[字符串]):单位={
val conf=loadConfigOrThrow[conf]//如果无法加载conf,将抛出
多斯塔夫(形态)
}
pureconfig.loadConfig
返回
的原因是
加载配置可能会失败<代码>其中一个
对两种故障都建模 案例,左<代码>和成功案例,右<代码>。这是 对于库来说很好,因为您永远不知道加载配置在哪里 将被调用,因此您不想抛出 例外。虽然这通常是正确的,但当
loadConfig
为 从“表面”方法使用,例如,
main
,引发异常或 在配置加载失败的情况下退出是有意义的 这就是pureconfig提供
LoadConfigorStrow
的原因

如果您不喜欢抛出异常,或者您更喜欢自定义 故障处理程序,如
讲师euseraboutstaff
,您可以创建 助手:

def loadConfig():选项[Conf]={
val errorConf=pureconfig.loadConfig[Conf]
errorOrConf.left.foreach(讲师尤瑟拉布茨塔夫)
errorOrConf.t选项
}
def main(参数:数组[字符串]):单位=
loadConfig().foreach(doStuff)
最后要记住的一件事是,这有一个小问题 代码是指应用程序的退出代码不受 配置失败。如果要为何时设置退出代码 无法加载配置,然后将
main
更改为

val configReaderFailureErrorCode=42
专用def配置失败退出()=
系统退出(configReaderFailureErrorCode)
def main(参数:数组[字符串]):单位=
loadConfig().fold(configFailureExit())(doStuff)

我想说,如果你先调用
pureconfig.loadConfig
,这意味着这是你程序的主要目的。哇!惊人的答案!