gpt4 book ai didi

scala - 提供类型安全配置 getter 的默认值

转载 作者:行者123 更新时间:2023-12-05 00:11:55 25 4
gpt4 key购买 nike

所以我的代码中多次出现类似的代码片段:

val optionValue = try {
Some(config.getString(key))
} catch {
case _: Missing => None
}

我想以某种方式从我的代码中消除此重复项。我知道typesafe提供了一种方法来提供备用配置文件以提供默认配置值。但是,就我而言,某些属性没有任何默认值。它们是可选属性。

重构此代码的最佳方法是什么。

最佳答案

由于您使用的是Scala,并假定您可以使用隐式,所以我建议使用一种使用丰富类的推荐方法,该类允许您保留Option语法。

示例配置。

existent.sample.string="I exist!"
existent.sample.boolean=true

示例丰富类。
package config

import com.typesafe.config.{Config, ConfigException}

object MyConfig {

implicit class RichConfig(val config: Config) extends AnyVal {
def optionalString(path: String): Option[String] = if (config.hasPath(path)) {
Some(config.getString(path))
} else {
None
}

def optionalBoolean(path: String): Option[Boolean] = if (config.hasPath(path)) {
Some(config.getBoolean(path))
} else {
None
}

// An example of using the exception approach - but less efficient than using hasPath
def optionalString2(key: String): Option[String] = try {
Some(config.getString(key))
} catch {
case _: ConfigException => None
}

}
}

请注意,最好使用 hasPath(而不是使用 Try)来检查您的方案中是否存在 key ,而不是让JVM创建一个对于可选配置不感兴趣的异常。允许不存在。

演示
import com.typesafe.config._

object ConfigTest extends App {

import MyConfig._

val conf = ConfigFactory.load

val optionalString = conf.optionalString("existent.sample.string")
val optionalStringNone = conf.optionalString("non-existent.sample.string")

println(s"String config value: $optionalString")
println(s"Optional (non-existent) String config value: $optionalStringNone")

val optionalBoolean = conf.optionalBoolean("existent.sample.boolean")
val optionalBooleanNone = conf.optionalBoolean("non-existent.sample.boolean")

println(s"Boolean config value: $optionalBoolean")
println(s"Optional (non-existent) String config value: $optionalBooleanNone")

}

打印。
// String config value: Some(I exist!)
// Optional (non-existent) String config value: None
// Boolean config value: Some(true)
// Optional (non-existent) String config value: None

docs

关于scala - 提供类型安全配置 getter 的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52144157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com