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
,这意味着这是你程序的主要目的。哇!惊人的答案!